关于for循环的块级作用域问题总结(一)

爷,独闯天下 提交于 2020-01-25 11:10:40

最近有小伙伴问到关于for循环和作用域的问题,那么我们今天来总结 一下,遇到这样的问题应该如何解答,当for循环和异步操作又会产生奇妙的作用,今天先不进行总结
先看个正常的for循环吧

for(var i = 0;i < 5;i++){
    console.log(i)
}

1.这是个最简单的for循环的遍历,控制台将打印0,1,2 , 3,4
我们来将这个代码变动一下:

for (var i = 0; i  < 5; i++) {

}
console.log(i);

2.控制台将只打印5,这个原因是因为JavaScript中没有块级作用域导致的。对于有块级作用域的语言来讲,for语句初始化变量的表达式所定义的变量,只会存在于循环的循环境之中。而对于JavaScript而言,由for语句创建的变量i即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。
我们来继续变动一下:

for (let i = 0; i  < 5; i++) {}
console.log(i);

3.我们把var改成了let,控制台报错i is not defined。
这是因为let是es6新增的语法,而let具有块级作用域的特点,这么一来let声明的变量只在它所在的代码块有效,所以在外部是访问不到的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!