Q:js有木有块级作用域
A:js里面的块级作用域也是在ES6里面引入的,那么,什么又是ES6呢?
ES6是ECMAScript 6,说到这里,我先提一下javascript的结构。其实一个完整的js是由ECMAScript、DOM和BOM组成的,关于ECMAScript 也有好几个版本,而在ECMAScript 5里面并没有引入块级作用域。因此当谈到js的块级作用域的时候,就会想起ECMAScript 6。
Q:ECMAScript 6里面的块级作用域是什么呢?
A:由一对花括号
{}
中的语句集都属于一个块,在这个{}
里面包含的块内定义的所有变量在代码块外都是不可见的,因此称为块级作用域。
那么,块级作用域是
eg
image.png
image.png
b
并没有给它赋值,只是声明了而已,因此输出undefined
,对于此例的a
,b
并不是同一种数据类型,因此返回null
.
eg
image.png
image.png
如上,该js代码被一对
{}
包起来了,那么控制台输出的结果就是a
,b
变量的值。
Q:有木有发现什么呢?
image.pngA:
b
是在该块级作用域里面定义的,但是在该块级作用域外边也可以被访问。是的,块级作用域和ES5里面规定的函数作用域并不相同,请看下面的例子。
image.png
点击按钮,控制台正确打印
i
.
但是
image.png点击按钮,控制台会报错
小总结
如果是函数作用域的话,在
{}
外面不会访问到在{}
里面声明的变量,但是在块级作用域里面就可以实现在{}
外访问在里面声明的变量。
网友评论