javascript复制变量以在函数中使用

时间:2015-02-17 04:52:51

标签: javascript function variables scope

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

我有这样的代码(不完全是,这段代码非常简单,而且我的代码有点复杂):

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

所以我的想法是funcs中的每个函数在调用时都会返回0到9之间的每个数字。但问题是每个人在调用时仍然指的是变量i,所以他们都将返回9.我如何按预期工作(即所有n,funcs[n]() === n)?如何让每个函数范围仅捕获i的当前值,而不是更改的值?

2 个答案:

答案 0 :(得分:3)

我可以这样做:

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

答案 1 :(得分:0)

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

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

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