let、const 和 var 的区别是什么?
请从作用域、变量提升、重复声明、全局属性、修改权限等方面全面比较 let、const 和 var。
回答
小字辈
| 特性 | var | let | const |
|---|---|---|---|
| 作用域 | 函数作用域 | 块级作用域 | 块级作用域 |
| 变量提升 | 提升,初始化为 undefined | 提升,TDZ 未初始化 | 提升,TDZ 未初始化 |
| 重复声明 | 允许 | 不允许(SyntaxError) | 不允许(SyntaxError) |
| 全局属性 | 全局 var 成为 window 属性 | 不会挂载到 window | 不会挂载到 window |
| 修改值 | 可修改 | 可修改 | 不可修改(引用不可变,对象属性可变) |
| 声明必赋值 | 否 | 否 | 是(SyntaxError 若未赋值) |
| 使用前声明 | 否(undefined) | 必须(否则 ReferenceError) | 必须 |
最佳实践:默认用 const,需要重新赋值用 let,避免使用 var。