如何在循环内的闭包中保留参数?

时间:2014-05-24 20:55:40

标签: javascript node.js

我正在构建一个函数数组,这些函数将在后一次调用,如下所示:

callbackArray = [];

for(var i = 0; i < 5; i ++) {
  callbackArray.push(function() {
    console.log(i);
  });
}

for(var i = 0; i < callbackArray.length; i ++) {
  // This will not preserve the value of i
  callbackArray[i]();
}

这将打印4,4,4,4,4。但我需要一种方法来保留i的值,这样它就不会保留相同的引用,而是创建一个新的本地值副本。预期结果应为0,1,2,3,4。这是一个显示问题的简化示例。但是变量i应该是对象,数组,函数或基元。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

这可能会有所帮助

var callbackArray = [];

// create a function that returns a new function with "i" properly scoped
var fn = function (i) {
    return function () {
        console.log(i);
    };
};

for(var i = 0; i < 5; i ++) {
    callbackArray.push(fn(i));
}

callbackArray[1](); // output 1
callbackArray[4](); // output 4
callbackArray[0](); // output 0

如果使用jquery来实现相同的效果,也可以使用$ .proxy

See api docs for proxy