ECMAScript 6let
应该提供块范围而不会让人头疼。有人可以解释为什么在下面的代码i
中函数解析为循环中的最后一个值(就像 with 一样var
)而不是当前迭代中的值?
"use strict";
var things = {};
for (let i = 0; i < 3; i++) {
things["fun" + i] = function() {
console.log(i);
};
}
things["fun0"](); // prints 3
things["fun1"](); // prints 3
things["fun2"](); // prints 3
根据在循环中使用的MDN,应该将变量绑定在循环体的范围内。当我在块内使用临时变量时,事情就像我期望的那样工作。为什么这是必要的?let
for
"use strict";
var things = {};
for (let i = 0; i < 3; i++) {
let index = i;
things["fun" + i] = function() {
console.log(index);
};
}
things["fun0"](); // prints 0
things["fun1"](); // prints 1
things["fun2"](); // prints 2
我用 Traceur 和node --harmony
.