javascript中计数器变量的奇怪值

Weird value for counter variable in javascript

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Javascript infamous Loop problem?

出于某种原因,我的函数里面的每个div元素都有"6":

1
2
3
4
5
for(var i = 1; i <= 5; i++){
  $('').appendTo(something).click(function(){
    alert(i);  // <-- it's 6. wtf??
  });
}

而不是1,2,3等

另一方面,该类似乎正确设置..

我究竟做错了什么?


您的for循环正在页面加载时执行。 警报仅在for循环结束后发生单击事件时触发。 因此i的值现在是6。

1)页面加载,for循环做它的东西......

2)稍后会触发click事件。 此时i的值为6,因为for循环已经完成。


问题是您需要创建一个闭包来捕获绑定click函数时i的值。

试试这个:

1
2
3
4
5
6
7
8
9
for(var i = 1; i <= 5; i++)
{
  $('')
    .appendTo(something)
    .click(function(value)
    {
      return function() { alert(value) };
    }(i));
}