有人可以解释为什么它控制台退出10,10,10而不是9,9,9? 当它经过循环时,不应该停在9?
var foo = [];
for (var i = 0; i < 10; i++) {
foo[i] = function() {
return i;
};
};
console.log(foo[0]());
console.log(foo[1]());
console.log(foo[2]());
答案 0 :(得分:3)
每当执行使用来自父作用域的任何变量的任何function
时,它将获得在function
执行时保留的变量的值。在您的情况下,由于i
,10
在执行时已经到达i++
。
要获得预期结果,您可以向其添加IIFE
,其范围内将保留i
的值。
var foo = [];
for (var i = 0; i < 10; i++) {
foo[i] = (function(i) {
return function() {
return i;
};
})(i);
};
console.log(foo[0]());
console.log(foo[1]());
console.log(foo[2]());
&#13;
答案 1 :(得分:-1)
您可以使用此语法来保留上下文
for (let i = 0; i < 10; i++) {
foo[i] = () => i;
};
console.log(foo[0]());
console.log(foo[1]());
console.log(foo[2]());