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;