迭代函数定义的Javascript闭包

时间:2012-12-09 18:43:17

标签: javascript function closures

  

可能重复:
  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的引用关闭。我该怎么做?

1 个答案:

答案 0 :(得分:3)

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

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