Javascript for循环中的jquery迭代器

Javascript for循环中的jquery迭代器,javascript,jquery,for-loop,iterator,Javascript,Jquery,For Loop,Iterator,我是JavaScript和jQuery的新手。我发现了一个我自己解决不了的问题 for (i = 0; i < 12; i++) { $("#c" + i).on("click", function () { alert(i) }); } 效果很好。这不是一样吗?这是因为var关键字的工作方式,也是因为 $("#c" + i).on("click", function () { alert(i) });` 本质上是异步的 就这样做吧 快速修复 for (let i = 0; i

我是JavaScript和jQuery的新手。我发现了一个我自己解决不了的问题

for (i = 0; i < 12; i++)
{
    $("#c" + i).on("click", function () { alert(i) });
}

效果很好。这不是一样吗?

这是因为
var
关键字的工作方式,也是因为

$("#c" + i).on("click", function () { alert(i) });`
本质上是异步的

就这样做吧

快速修复

for (let i = 0; i < 12; i++)
 {
   $("#c" + i).on("click", function () { alert(i) });
 }

您正在提醒
i
。当点击发生时,循环已经完成,因此
i
被设置为
12
而不是
id
您可以使用类名配置来处理点击事件。这将有助于:谢谢!这很有魅力!所以这都是关于从迭代器“克隆”值的。抱歉,看起来像是新手犯的错误,但这是我在JS中的第二天,我无法在这里和谷歌上找到解决方案:)“本质上是异步的”?这是一种令人困惑的说法,即函数是在函数作用域
var
已经更改的稍后时间点运行的。毕竟,你不会叫
在本质上是同步的,是吗?问题只是
var
@Xufox我同意这是一种令人困惑的说法。不过我已经修好了。
for (let i = 0; i < 12; i++)
 {
   $("#c" + i).on("click", function () { alert(i) });
 }
for(var i = 0; i < 12; i++) {
  (function(i) {
    $("#c" + i).on("click", function () { alert(i) });
  })(i);
}