javascript 复制一个变量用于函数

javascript copy a variable for use in function

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

我有这样的代码(不完全是,这段代码真的很简单,我的有点复杂):

var funcs = [];
for (var i = 0; i < 10; i++) {
    funcs[i] = function() { return i; };
}

所以想法是 funcs 中的每个函数在调用时都会 return 从 0 到 9 的每个数字。但问题是每个人在调用时仍然引用变量 i,所以它们都会 return 9. 我如何按预期完成这项工作(即对于所有 n,funcs[n]() === n)?如何让每个函数作用域只捕获 i 的当前值,而不捕获变化的值?

var funcs = [];
for (var i = 0; i < 10; i++) {
    funcs[i] = makeFunction(i);
}

function makeFunction(i) {
    return function() {
        return i;
    }
}
返回函数中的

i 绑定到 makeFunction 中的局部变量 i 而不是主代码块中的 i

我可以这样做:

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