javascript中计数器变量的奇怪值
可能重复:javascript中计数器变量的奇怪值,javascript,Javascript,可能重复: 出于某种原因,对于每个div元素,我在函数中得到“6”: for(var i = 1; i <= 5; i++){ $('<div class="e-' + i + '"></div>').appendTo(something).click(function(){ alert(i); // <-- it's 6. wtf?? }); } for(var i=1;i您的for循环正在页面加载时执行。警报仅在for循环完成后发生单
出于某种原因,对于每个div元素,我在函数中得到“6”:
for(var i = 1; i <= 5; i++){
$('<div class="e-' + i + '"></div>').appendTo(something).click(function(){
alert(i); // <-- it's 6. wtf??
});
}
for(var i=1;i您的for
循环正在页面加载时执行。警报仅在for循环完成后发生单击事件时触发。因此i
的值现在为6
1) 页面加载,for
循环执行其任务
2) 稍后会触发一个单击事件。此时i
的值为6,因为for
循环已经完成。问题是,您需要创建一个闭包,以便在绑定click函数时捕获i
的值
试试这个:
for(var i = 1; i <= 5; i++)
{
$('<div class="e-' + i + '"></div>')
.appendTo(something)
.click(function(value)
{
return function() { alert(value) };
}(i));
}
for(var i=1;i ref:这称为“仅最后一个”问题。下面的答案很好地总结了这一点,我不久前写了一篇文章,其中包含了这一点:为什么不使用匿名函数?它看起来更好。而且循环中的var fn
也有误导性,因为js中没有块作用域。很酷,我不知道块作用域的缺乏。不管怎样,我未经编辑的答案都很好。哇!我更喜欢更干净:for(var i=1;i为什么每次迭代都创建一个匿名函数?这样做是为了每次捕获i
的值。闭包就是这样做的。