var a = 2;
function test() {
console.log(a);
let a = 5;
}
test();
复制代码你觉得上面的代码会输出什么呢?是输出2,还是undefined
呢?
如果说,let
没有变量提升的效果的话,那么应该是输出2
。如果说let
拥有和var
一样的变量提升效果的话,那么应该是输出undefined
。然而,其实上面的代码是会报错的。会报"ReferenceError: a is not defined"
错误。那么为什么呢?
let
虽然具有变量提升的功能,但是它又与var
不一样,它具有一个临死性死区
的概念。
临死性死区
其实就是说,a
我已经声明了,可是在没有到它赋值的时候,你都不能使用这个变量,不然就会报错。所以该当前作用域开始,一直到let a = 5
为止这整一块,都是a
变量的临死性死区,你不能使用它。而const
和let
它们的变量提升的效果是一样的,也都存在着临死性死区的概念。
网友评论