块级作用域

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:有木有发现什么呢?

Ab是在该块级作用域里面定义的,但是在该块级作用域外边也可以被访问。是的,块级作用域和ES5里面规定的函数作用域并不相同,请看下面的例子。

image.png

image.png

点击按钮,控制台正确打印i.

但是

image.png

点击按钮,控制台会报错

小总结

如果是函数作用域的话,在{}外面不会访问到在{}里面声明的变量,但是在块级作用域里面就可以实现在{}外访问在里面声明的变量。

你可能感兴趣的:(块级作用域)