关于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定义后,对函数外部无影响。为什么这里就没有问题呢?
0
收起
正在回答 回答被采纳积分+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
从网页搭建入门Java Web2018版
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10205 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星