为什么原来的代码不对呢
来源:4-5 编程练习
Mr洋
2020-04-22 16:46:45
var btns = document.getElementsByTagName('button');
for (var i = 0; i < 3; i++) {
btns[i].onclick = function () {
alert(i + 1);
};
}
循环的时候不就给每一个btn绑定了点击事件吗?绑定的时候i是有值的呀,怎么就变成4了呢
2回答
同学你好,理解的不对。页面打开时,只是执行了循环中的内容,为按钮绑定了点击事件。点击事件在页面打开时不会执行,需要点击按钮才会触发。而事件触发时,for循环早就结束了,所以每一个事件在执行时,alert获取的是最后一次的i值。
祝学习愉快 ~
好帮手慕夭夭
2020-04-22
同学你好,参考如下理解:
页面打开的时候,代码顺序执行,for循环很快就会执行完毕。而点击事件在页面打开时不会执行,需要点击按钮才会触发,即点击按钮时,for循环已经执行完。所以每一个点击事件中,拿到的都是最后i的值。具体参考如下:
页面打开时,for循环执行过程如下:
第一次循环 ,i=0 ,然后为索引为0的按钮(即第一个按钮)绑定了点击事件。
第二次循环,i=1, 然后为索引为1的按钮(即第二个按钮)绑定了点击事件。
第三次循环,i=2, 然后为索引为2的按钮(即第三个按钮)绑定了点击事件。
第四次循环,i=3 ,此时不符合i<3的循环条件,无法继续循环执行里面的内容了,即退出循环。
当点击按钮的时候 ,输出i+1。因为上面循环结束之后:i=3 。所以点击哪一个按钮,输出的都是4。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题