如何在JavaScript中让循环中的闭包记住每次迭代的变量值?
你好!我刚开始学习JavaScript,遇到了一个无法理解的问题。我有一个循环,在其中为多个按钮创建事件处理程序。每个按钮在点击时应输出自己的编号,但所有按钮都输出同一个数字——计数器的最后一个值。
// 动态创建按钮
for (var i = 0; i < 5; i++) {
var btn = document.createElement('button');
btn.textContent = '按钮 ' + i;
btn.addEventListener('click', function() {
alert('您点击了按钮编号 ' + i);
});
document.body.appendChild(btn);
}
当我点击任意按钮时,都会弹出消息“您点击了按钮编号 5”。为什么会这样?我期望每个按钮都能记住创建时所在迭代的i值。
我听说过闭包,但不理解它们在循环中是如何工作的。请解释如何正确解决这个问题。最好能提供示例代码。