为什么会是输出4呢

为什么会是输出4呢

var btns = document.getElementsByTagName('button');

         for (var i = 0; i < 3; i++) {

            btns[i].onclick = function () {

    alert(i + 1);

    };

   }


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

@qq_慕容616826 你好同学,点击事件虽然在for循环中,但是点击事件需要点击按钮才会执行。也就是如下事件中代码,并不会在for循环的时候执行,而是当触发点击事件才会执行。

即打开页面的时候,先获取所有的按钮,然后在for循环中给每一个按钮绑定点击事件,注意alert不会执行,所以事件也拿不到当前循环中的i值。代码执行很快的,点击按钮的时候,for循环已经执行完毕。此时i等于3。所以当你点击按钮的时候,拿到的都是当前作用域下的i=3。

http://img1.sycdn.imooc.com//climg/5cd62e0f000138d807650220.jpg

祝学习愉快 。

好帮手慕慕子 2019-05-07 16:03:58

同学你好,因为没有一个作用域保存每一次循环的i值,所以当执行点击事件的时候,就会沿着当前作用域找到for循环中的i,而for循环中i已经是循环完之后的了,所以每次点击都是同一个i值。

可以参考下面的示例实现弹出对应的值:在for循环外面定义函数,里面绑定点击事件,在for循环中调用函数即可

http://img1.sycdn.imooc.com//climg/5cd13bda0001518909820460.jpg

如果帮助到了你 , 欢迎采纳!

祝学习愉快~~~~


  • 请问老师,为什么说”当执行点击事件的时候,就会沿着当前作用域找到for循环中的i,而for循环中i已经是循环完之后的了“点击事件函数不是在for循环里面么?那点击button按钮,程序是怎么执行的?执行顺序是什么?
    2019-05-11 08:23:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师