老师,可以这样理解吗
来源:4-5 编程练习
qq_Mr郭生_0
2020-05-31 12:05:45
for(var i=0;i<3;i++){click(i)};
function click(i){btns[i].onclick=function(){
alert(i+1)}}
这里全局作用域有变量i和函数click(),函数click()中有局部作用域onclick函数,
执行for循环之后,创建三个独立的局部作用域click(0),click(1)和click(2)
执行点击操作,相当于执行click()函数里面的onclick函数,传入对应的i值
事件执行后,变量i值被销毁
1回答
同学你好,前面理解的可以,但是最后一点理解的不正确。变量i为全局变量,全局变量在代码运行时,不会销毁,除非你把页面关闭。这里同学忽略了一个参数问题,即click中的参数i是一个局部变量,只不过和全局i名字一样(函数内部定义了i,就不会去查找全局i了)。老师改一下参数名讲解,就好理解了:
函数click调用时,传入实参i。即click(0),click(1)和click(2)之后,每一个作用域中,通过自己的参数index,接收到了不同的值。参数相当于一个局部变量,所以几个作用域中的index不会互相影响。即不同的事件触发,拿到自己的参数index。
但是注意,这个参数index不会销毁。因为这里给元素btns绑定事件时,使用到了index。页面中的元素是不会销毁的,那么使用的这个index也不会销毁。那么这个事件就不能正常绑定了。暂时了解一下,等同学学习到后面的闭包,也会学到局部变量不能销毁的情况,通俗的说,就是一个局部变量还有用处,它就不会销毁。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题