可能重复:
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
. 我该怎么做?