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

闭包以及循环中创建函数求解答!

闭包以及循环中创建函数求解答!

茅侃侃 2019-09-09 20:13:55
在看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贡献2065条经验 获得超13个赞

但是alert(i)中的i指向函数的局部变量i,是变量,当触发任何一个node的点击,alert的是i这个变量的当前值,没什么问题吧。
                            
查看完整回答
反对 回复 2019-09-09
?
翻过高山走不出你

TA贡献1875条经验 获得超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-09-09
  • 2 回答
  • 0 关注
  • 274 浏览
慕课专栏
更多

添加回答

举报

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