JavaScript 中的变量声明提升总结:

1. 函数声明:会提升,在当前作用域的任何区域都可访问
2. 函数表达式:不提升
3. var 变量:会提升,会被初始化为 undefined
4. let、const 变量:会提升,会被初始化为 uninitialized。提升到变量赋值之间的区域存在暂时性死区
5. class 声明:与 let、const 行为一致
6. class 表达式:与函数表达式行为一致
7. 块级作用域:对于 函数声明 和 var 变量 来说会提升,不仅是当前作用域,还有父级作用域:
7.1 在父级作用域中访问时,如果在代码块之前,皆为 undefined,代码块之后取决于代码块中对变量的操作
7.2 在当前作用域中访问时,与全局作用域和函数作用域一致

对于同名的函数声明与 var 变量,函数声明要优于 var 变量提升,var 变量被函数声明覆盖。
展开
2