为了账号安全,请及时绑定邮箱和手机立即绑定

急求!!!!闭包以及循环中创建函数十分感谢

急求!!!!闭包以及循环中创建函数十分感谢

慕田峪9158850 2019-08-05 23:03:19
在看JS语言精粹遇到的问题,先上代码varadd_the_handlers=function(nodes){vari;for(i=0;ialert(0);//第一次循环nodes[1].click=()=>alert(1);//第二次循环...依次类推nodes[n].click=()=>alert(n);//第n+1次循环
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

对于事件处理函数而言,其内部上下文中并不存在变量i,于是就会尝试沿作用域链向父级的作用域中去寻找。而在上一级,也即add_the_handlers这个函数的上下文中,找到了变量i,所以当触发事件处理函数时,会获取到add_the_handlers中的i的值。于是乎:for循环时,给若干个元素绑定了onclick处理函数,for循环结束后,此时add_the_handlers上下文中的i变量的值为nodes.length。当触发某个元素的点击事件时,获取到的i都是add_the_handlers上下文中的i,也即都会是nodes.length。
                            
查看完整回答
反对 回复 2019-08-05
?
largeQ

TA贡献2039条经验 获得超7个赞

但是alert(i)中的i指向函数的局部变量i,是变量,当触发任何一个node的点击,alert的是i这个变量的当前值,没什么问题吧。
                            
查看完整回答
反对 回复 2019-08-05
  • 2 回答
  • 0 关注
  • 257 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信