参见英文答案 >
JavaScript closure inside loops – simple practical example39个
请考虑以下Javascript代码:
请考虑以下Javascript代码:
var a = []; var f = function() { for (var i = 0; i < 3; i++) { a.push(function(){alert(i)}); } for (var j = 0; j < 3; j++) { a[j](); } };
警报三次打印出’3′.我想要一个不同的行为 – 在循环的每次迭代中生成一个打印i的当前值的函数.即3个打印不同索引的函数.
有任何想法吗?
解决方法
创建一个匿名函数,它接受i作为参数并返回该特定函数:
for (var i = 0; i < 3; i++) { a.push((function(i) { return function() { alert(i); } })(i)); } for (var j = 0; j < 3; j++) { a[j](); }
或者做类似的事情:创建一个匿名函数,它接受i作为参数将函数添加到数组:
for (var i = 0; i < 3; i++) { (function(i) { a.push(function() { alert(i); }); })(i); } for (var j = 0; j < 3; j++) { a[j](); }