所以我明白为什么点击任何按钮都会弹出“按钮 [循环中 i 的最后一个值] 但为什么我 == 5 而不是 4?
function myFn() {
var elems = document.getElementsByTagName('button');
var len = elems.length;
for (var i = 0; i < len; i++) {
elems[i].onclick = function() {
alert ("Button " + i);
};
}
alert ("Button " + i);
}
myFn();
最佳答案
在循环结束时,i
变量的最后一个值为 5
。因此 myFn()
中的 alert
语句将在页面加载时显示“Button 5”。 for 循环内函数内的警报语句通过闭包作用域引用相同 变量。因此,点击按钮也会提醒“按钮 5”。
希望对您有所帮助!请参阅下面打印您想要的内容的功能。需要注意的是,通过复制 i 的值(JavaScript 中的按值传递机制)来引入另一个闭包作用域,以便 onclick 函数引用另一个变量 (i
),它有一个值的副本。
function myFn() {
var elems = document.getElementsByTagName('button');
var len = elems.length;
for (var i = 0; i < len; i++) {
(function(i) {
elems[i].onclick = function() {
alert ("Button " + i);
};
})(i);
}
alert ("Button " + i);
}
myFn();
关于javascript - For 循环意外增量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24246826/