可能重复:
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
的引用关闭。我该怎么做?
答案 0 :(得分:3)
最简单的方法是通过自执行函数的参数传递函数:
for(...) {
(function(i) {
// here you have a new i in every loop
})(i);
}