Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中计数器变量的奇怪值_Javascript - Fatal编程技术网

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
的值。闭包就是这样做的。