关于for循环中定义的function影响局部变量的作用域的问题

关于for循环中定义的function影响局部变量的作用域的问题

老师代码中遍历所有点击,且绑定点击事件,点击圆点切换图片的功能代码提到
	for(var d=0;d<pics.length;d++)
	{
		dots[d].onclick=function(){
			alert(d);
		}
	}

这里面使用弹出的是值为3,老师说的原因是因为function会影响b的作用域,没查到相关的资料,不知道这个到底是哪个知识点影响的,希望老师能够详细的讲解一下发生这个的原因,或者提供资料链接也行。

个人一开始想的是整个for循环只是给圆点绑定的click事件,并没有真正触发alert,所以d的值一值在++,直到d超出范围,但是这个d并没有就此释放(希望老师解释一下这个,d不是一个局部变量吗),最终在真正点击圆点的时候,就触发了事件,alert出d的值,为3.

上面的代码块中,将b变量用let定义,最终弹出的b的值就是 0 1 2没有问题,这里let的作用域是块,let是块级作用域,函数内部使用let定义后,对函数外部无影响。为什么这里就没有问题呢?


正在回答 回答被采纳积分+1

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

2回答
慕粉0907203 2018-08-21 11:19:45

我一开始也不太明白,经过网上搜索,我发现这个问题挺复杂的,下面的一篇博文最后有个很相似的例子。兴许这篇文章能有作用。

详解JavaScript作用域

https://blog.csdn.net/liuyan19891230/article/details/50417235     

还有一篇文章 JS闭包与变量

https://blog.csdn.net/liuyan19891230/article/details/49797689    


好帮手慕珊 2018-08-20 18:49:10

你好!你说的是3-6中老师提到的这段代码吧。老师在这里解释了弹出3的原因,可以当做一个知识点去记忆。老师的演示过程就是在讲解这个知识点怎么用。祝学习愉快!



  • 提问者 油炸花生米 #1
    总需要知其然还要知其所以然吧,不然不懂背后的原理,那也只是这个问题解决了,类似的问题却难说了。老师只是提了一下function会改变作用域,但是具体原因没说明
    2018-08-21 09:18:53
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

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

在线咨询

领取优惠

免费试听

领取大纲

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