Possible Duplicate:
Javascript closure?




这可能以前曾被问过,但是...

如果我想要功能列表

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


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

最佳答案

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

for(...) {
    (function(i) {
        // here you have a new i in every loop
    })(i);
}

09-26 04:32