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

来源:4-5 编程练习

Walker游游

2019-11-02 10:45:07

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

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

写回答

2回答

好帮手慕言

2019-11-02

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

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

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

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

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

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

好帮手慕言

2019-11-02

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

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

0
halker游游
h 嗯,只是这样理解起来简单一点。谢谢老师。
h019-11-02
共1条回复

0 学习 · 14456 问题

查看课程