ECMAScript 6 let应该提供块范围,而不会引起麻烦。有人可以解释为什么在i函数下面的代码中,解析为循环中的最后一个值(与一样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
根据MDNlet在这样的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。
蝴蝶不菲
梵蒂冈之花
相关分类