所以我理解为什么点击任何按钮会弹出"按钮[循环中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();
答案 0 :(得分:1)
循环结束时i
变量的最后一个值为5
。因此alert
内的myFn()
语句会说&#34;按钮5&#34;在页面加载。 for循环内函数内的alert语句通过闭包范围引用相同的变量。因此,按钮上的点击也会提醒&#34;按钮5&#34;。
希望它有所帮助!请参阅下面打印您想要的功能。警告是通过复制i的值(在JavaScript中按值传递机制)引入另一个闭包范围,以便onclick函数引用另一个变量(i
),其具有< strong>值的副本。
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();
答案 1 :(得分:0)
您必须更改以下功能:
<强> JS 强>
function myFn() {
var elems = document.getElementsByTagName('button');
var len = elems.length;
for (var i = 0; i < len; i++) {
elems[i].onclick = function() {
alert (this.innerHTML);
};
}
alert ("Button " + i);
}
myFn();
由于@Hunter McMillen提到i==5
是阻止循环的条件。
这是fiddle