const 和 let 的差異 - daniel-qa/Vue GitHub Wiki
const 和 let 的差異
在 JavaScript 中,const 和 let 是用于声明变量的两种方式。它们的主要区别在于变量的重新赋值和作用域的特性。
1. 是否允许重新赋值
- const(constant)
声明后不允许重新赋值。 如果是对象或数组,引用地址不能变,但可以修改其内容。 适用于需要保证变量值不变的场景。 示例:
const x = 10;
x = 20; // ❌ 报错:不能重新赋值
const obj = { name: "Alice" };
obj.name = "Bob"; // ✅ 允许修改对象属性
obj = { age: 25 }; // ❌ 报错:不能重新赋值引用
let
声明后可以重新赋值。
适用于变量值需要动态变化的场景。
示例:
let x = 10;
x = 20; // ✅ 合法:允许重新赋值
let arr = [1, 2, 3];
arr = [4, 5, 6]; // ✅ 合法:允许重新赋值引用
2. 作用域
- 块级作用域(Block Scope)
let 和 const 都是块级作用域声明方式,作用范围限制在 {} 内。
与 var 不同,var 是函数作用域。
示例:
if (true) {
let a = 10;
const b = 20;
}
console.log(a); // ❌ 报错:a 未定义
console.log(b); // ❌ 报错:b 未定义
对比 var:
if (true) {
var c = 30;
}
console.log(c); // ✅ 输出 30(`var` 是函数作用域)
3. 暂时性死区(Temporal Dead Zone)
let 和 const 都有暂时性死区,在声明之前无法访问变量。
var 没有暂时性死区,虽然会被提升(Hoisting),但其值为 undefined。
示例:
console.log(a); // ❌ 报错:Cannot access 'a' before initialization
let a = 10;
console.log(b); // ❌ 报错:Cannot access 'b' before initialization
const b = 20;
对比 var:
console.log(c); // ✅ 输出 undefined(被提升)
var c = 30;