要让For循环将按钮的索引保存在另一个变量中,可以使用闭包或者使用let关键字来解决。
闭包解决方案:
var buttons = document.getElementsByTagName("button");
var indexArray = [];
for (var i = 0; i < buttons.length; i++) {
(function(index) {
buttons[index].addEventListener("click", function() {
indexArray.push(index);
console.log(indexArray);
});
})(i);
}
在每次循环迭代时,通过立即执行函数创建一个新的作用域,将当前的索引值传递给该函数,并在该函数内部创建一个闭包,使得每个按钮的点击事件都能够访问到对应的索引值。
使用let关键字解决方案:
var buttons = document.getElementsByTagName("button");
var indexArray = [];
for (let i = 0; i < buttons.length; i++) {
buttons[i].addEventListener("click", function() {
indexArray.push(i);
console.log(indexArray);
});
}
使用let关键字声明循环变量i,它会在每次迭代时创建一个新的块级作用域,使得每个按钮的点击事件都能够访问到对应的索引值。
这两种解决方案都能够实现将按钮的索引保存在另一个变量中,并且避免了循环中的变量共享问题。
领取专属 10元无门槛券
手把手带您无忧上云