JavaScript 中 var、let 和 const 的区别与使用场景
主要区别
特性 | var | let | const |
---|---|---|---|
作用域 | 函数作用域 | 块级作用域 | 块级作用域 |
变量提升 | 有(初始化为undefined) | 有(未初始化,TDZ) | 有(未初始化,TDZ) |
重复声明 | 允许 | 不允许 | 不允许 |
重新赋值 | 允许 | 允许 | 不允许 |
全局属性 | 会成为window属性 | 不会 | 不会 |
详细解析
1. 作用域
-
var:函数作用域(function-scoped)
function test() {var x = 1;if (true) {var x = 2; // 同一个变量console.log(x); // 2}console.log(x); // 2 }
-
let/const:块级作用域(block-scoped)
function test() {let x