我不确定如何更好地表达这个问题,但基本上我的问题是:
我有这样的代码(不完全是,此代码非常简单,而我的代码则稍微复杂一些):
var funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = function() { return i; };
}
因此,想法是
funcs
中的每个函数在被调用时都会返回从0到9的每个数字。但是问题在于,每个变量在被调用时仍在引用变量i
,因此它们都将返回9。如何获得每个函数作用域以仅捕获funcs[n]() === n
的当前值,而不捕获变化的值? 最佳答案
我可以这样:
var funcs = [];
for (var i = 0; i < 10; i++) {
(function (i) {
funcs[i] = function () {
return i;
};
})(i);
}
alert(funcs[3]());
为每次迭代创建一个单独的激活框架
您也可以使用地图:
var numbers = [];
for (var i = 0; i < 10; i++) {
numbers.push(i);
}
var funcs = numbers.map(function (i) {
return function () { return i; };
});
alert(funcs[3]());