gpt4 book ai didi

JavaScript 单击处理程序在 for 循环中未按预期工作

转载 作者:IT老高 更新时间:2023-10-28 13:14:26 25 4
gpt4 key购买 nike

我正在尝试学习 JS,但遇到了一个问题。

我尝试了很多东西并用谷歌搜索,但都是徒劳的。以下代码无法按预期工作。我应该在点击时获得 i 的值,但它总是返回 6。我正在拔头发;请帮忙。

for (var i = 1; i < 6; i++) {

console.log(i);

$("#div" + i).click(
function() {
alert(i);
}
);
}

jsfiddle

最佳答案

Working DEMO

这是一个经典的 JavaScript 闭包问题。 i 对象的引用被存储在点击处理程序闭包中,而不是 i 的实际值。

每个单击处理程序都将引用同一个对象,因为只有一个计数器对象可以容纳 6,因此每次单击都会得到 6 个。

解决方法是将其包装在一个匿名函数中并将 i 作为参数传递。原语在函数调用中按值复制。

for(var i=1; i<6; i++) {
(function (i) {
$("#div" + i).click(
function () { alert(i); }
);
})(i);
}

更新

Updated DEMO

或者您可以使用 'let'而是用 var 来声明 ilet 每次都为您提供新的绑定(bind)。它只能在 ECMAScript 6 严格模式中使用。

'use strict';

for(let i=1; i<6; i++) {

$("#div" + i).click(
function () { alert(i); }
);
}

关于JavaScript 单击处理程序在 for 循环中未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16589806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com