在循环中为每个元素分配 EventListener,而不是在循环中使用一个共同的变量来赋值 EventListener。这样可以避免覆盖以前的元素的 EventListener。
例如,原始代码可能如下所示:
var buttons = document.getElementsByTagName("button");
var i;
for (i = 0; i < buttons.length; i++) {
  buttons[i].addEventListener("click", function() {
    console.log("Button " + i + " clicked.");
  });
}
修复代码应该像这样:
var buttons = document.getElementsByTagName("button");
var i;
for (i = 0; i < buttons.length; i++) {
  (function (i) {
    buttons[i].addEventListener("click", function() {
      console.log("Button " + i + " clicked.");
    });
  })(i);
}
通过使用闭包,可以为每个元素分配独特的 i 值,然后为每个按钮添加一个独特的 EventListener。