变量提升(hoisting)
var
和 function
的声明毫无疑问是会被提升到其所在的全局作用域顶部或者函数作用域顶部的。
故而,对于 var
和 function
可以先使用后声明。
但是对于 let
和 const
,各种文章教程都说不会被js提升。
但是我从暂时性死区(TDZ)中发现其实他们俩也是存在变量提升的,只是他们被提升的时候不会在js内部被初始化。
let
对于 let
,具有块级作用域,会被提升到其所在代码块顶部,不能重复声明,存在TDZ。
const
对于 const
,具有块级作用域,会被提升到其所在代码块顶部,一旦声明就无法改变其值,不能重复声明,存在TDZ。
故而,需要在声明的时候同时初始化。
我们可以看到 let
和 const
的唯一区别就是 const
需要申明时初始化否则报错,而且不能改变其值。
其他都相同,包括两者都存在TDZ。
因此造成了 let
和 const
由于TDZ的存在而不能在声明前使用。