0

可能重复:
Javascript 闭包?

以前可能有人问过这个问题,但是...

如果我想要一个函数列表

var funs = [
  function(){ console.log(1); },
  function(){ console.log(2); },
  function(){ console.log(3); },
  function(){ console.log(4); },
  function(){ console.log(5); } ]

似乎可以通过以下方式实现:

var funs = [];
for(var i=1; i <= 5; i++){
  funs.push(function(){ console.log(i) };
}

这不起作用,因为变量i是绑定到所有函数的单个变量,所以

funs[0](); funs[1](); funs[2](); funs[3](); funs[4]();

输出

6
6
6
6
6

不是

1
2
3
4
5

这不是我想要的输出。我想我需要强制 javascripti在创建函数时绑定值的副本,而不是用i. 我该怎么做?

4

1 回答 1

3

最简单的方法是通过自执行函数的参数传递函数:

for(...) {
    (function(i) {
        // here you have a new i in every loop
    })(i);
}
于 2012-12-09T18:45:55.240 回答