Avatar ·

如何在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值。

我听说过闭包,但不理解它们在循环中是如何工作的。请解释如何正确解决这个问题。最好能提供示例代码。