let的临时死区

2018-09-27  本文已影响0人  小小的白菜

js变量提升

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变量的临死性死区,你不能使用它。而constlet它们的变量提升的效果是一样的,也都存在着临死性死区的概念。

上一篇 下一篇

猜你喜欢

热点阅读