const
和 let
都是在 JavaScript ES6 中引入的变量声明方式,它们之间的主要区别在于 是否允许重新赋值 和 作用域。
1. 是否可以重新赋值
let
:声明的变量可以在后续代码中被重新赋值。const
:声明的变量不能被重新赋值。声明时必须初始化,否则会抛出错误。
let a = 10;
a = 20; // 可以重新赋值,不会报错
const b = 10;
b = 20; // 报错:Assignment to constant variable
2. 作用域
- 块级作用域(Block Scope):
let
和const
都遵循块级作用域,即仅在声明所在的{}
内有效。
if (true) {
let x = 30;
const y = 40;
}
console.log(x); // 报错:x is not defined
console.log(y); // 报错:y is not defined
3. 声明时的初始化要求
let
:声明变量时可以不赋值,稍后可以进行赋值。const
:声明变量时必须立即初始化,否则会报错。
let x; // 不报错
x = 10; // 赋值成功
const y; // 报错:Missing initializer in const declaration
4. 引用类型的可变性
对于对象和数组,const
仅限制变量名的重新赋值,但允许修改其内部属性。这意味着你可以更改对象的内容,但不能将整个对象重新赋值。
const obj = { name: "Alice" };
obj.name = "Bob"; // 不会报错
obj = {}; // 报错:Assignment to constant variable
let arr = [1, 2, 3];
arr.push(4); // 不会报错,数组内容可以改变
5. 使用建议
const
:如果声明后变量的值不需要更改,优先使用const
。let
:如果变量的值需要在后续代码中改变,则使用let
。
在开发中,推荐尽可能使用 const
,因为这样可以保证变量不会意外地被修改。