缘由:
学习小程序案例,结果案例是用es6写的,只能先去了解下es6(我js也不太好,总之一个字,差!),然后,那个教程中的第一章我就懵了。
相关资料:
杂谈
其实,这个在解除 for 循环时 var 和 let 定义变量的困惑这篇文档中说的很清楚了,我只是记录下我从不理解到有点理解的过程。
在我刚刚接触的时候,我就只记住了一个词语:块级作用域。let表示块级作用域,var作用的是全局的。
let.png
我的问题是,为什么for循环里面var i=0的时候,不管里面数值多少(10以内的),都是输出10;但是当let i= 0,的时候,就能输出自己本身的?
我群友回答: 群友回答.png
我一直以为a[6] ()进入之后,i=6,a[6]=function(){console.log(i);} 因为var i= 0;所以,开始循环,最后输出i=10;如果是let i= 0;的时候,是块级作用域,只服务于该作用域,a[i]=function(){console.log(i);},直接输出本身值。
后来,我询问了我师父(我笨的我师父都无奈了......),师父直接写了另一种方法给我:
闭包.png
最后:var是作用于全局,只有一个i,等循环之后,一步一步增加,最后i=10;但是let是块级作用域,不增加,只作用于自己,要得到i,只作用在一个for(){}上,输出自己的值。
对比.png
最后附上阮一峰老师的说明: image.png
网友评论