我不确定如何更好地表达这个问题,但基本上我的问题是:

我有这样的代码(不完全是,此代码非常简单,而我的代码则稍微复杂一些):

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]());

10-05 22:35