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);
}