为什么原来的代码不对呢

来源: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回答

好帮手慕夭夭

2020-04-23

同学你好,理解的不对。页面打开时,只是执行了循环中的内容,为按钮绑定了点击事件。点击事件在页面打开时不会执行,需要点击按钮才会触发。而事件触发时,for循环早就结束了,所以每一个事件在执行时,alert获取的是最后一次的i值。

http://img.mukewang.com/climg/5ea10abe09491a4b05160202.jpg

祝学习愉快 ~


1
hr洋
h 哦哦哦 酱紫呀 谢谢
h020-04-23
共1条回复

好帮手慕夭夭

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。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~


1
hr洋
h 循环时绑定了点击事件 那alert的值 当时不就定下了吗?
h020-04-23
共1条回复

0 学习 · 14456 问题

查看课程