JS 变量:「创建create、初始化initialize 和赋值assign」
- let 的「创建」过程被提升了,但是初始化没有提升。
- var 的「创建」和「初始化」都被提升了。
- function 的「创建」「初始化」和「赋值」都被提升了。
JS这门语言所有的声明都存在提升(var, let, const, function, function*, class)
let使用块级作用域,会形成暂时性死区(变量在初始化前无法使用)
console.log(a) // undefined
var a = 1
console.log(a) // 1
// 首先是创建a这个变量,然后变量会初始化为undefined,然后代码执行到var a = 1,变量a会被赋值为1
代码证明:
let a = 1
{
a = 2
let a
}
如果 let 不会提升,那么 a = 2 就会将外面的 a 由 1 变成 2
运行发现 a = 2 报错:Uncaught ReferenceError: Cannot access 'a' before initialization
let x = x 报错之后,再次 let x 依然会报错
如果 let x 的初始化过程失败了,那么x 变量就将永远处于 created 状态。
无法再次对 x 进行初始化(初始化只有一次机会)。
由于 x 无法被初始化,所以 x 永远处在暂时死区!
其实问题不大,因为此时代码已经报错了,后面的代码想执行也没机会