老师,请详细讲一下单击方法需要在循环外定义的原因

老师,请详细讲一下单击方法需要在循环外定义的原因

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

老师,每个循环里执行的绑定事件都是重新定义的匿名函数,而且,每次执行时,循环里的i值是不同的,为什么结果出来的是同样的?难道三个点击事件绑定的是同一个函数么?

正在回答

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

2回答

同学你好,以下方的代码为例:

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

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

点击事件定义在for循环外侧可以参考灰灰老师的解答,可以再理解下哦

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

  • Walker游游 提问者 #1
    老师,是不是可以这样理解:在绑定点击事件时,只是将函数地址保存在了onclick变量里,并没有执行函数内部的语句;而等到onclick被触发时,调用匿名函数,并开始执行函数内部语句,这时候for循环已经结束,i变量的值已经变为3,因此不论是哪个按键的function,在向上查找到i后,都只会得到3。而如果将函数放到循环外调用,其实是利用函数创建一块堆内存来保存传过来的i值,这样每个onclick都保存着各自的匿名函数,且函数的堆内存中保存着各自对应出入参数i。
    2019-11-02 16:05:36
好帮手慕言 2019-11-02 19:21:18

同学你好,onclick是事件,不是变量哦。大致是可以这样理解的,

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

  • 提问者 Walker游游 #1
    嗯,只是这样理解起来简单一点。谢谢老师。
    2019-11-02 19:36:43
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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