- 行为差异:
let
声明的变量:
- 可以在块级作用域内声明,并且允许重新赋值。它有块级作用域,避免了在函数作用域中变量提升导致的一些意外行为。例如在
if
语句块、for
循环块等块级作用域内有效。
const
声明的变量:
- 同样在块级作用域内声明,但是一旦声明并赋值后,就不能再重新赋值(对于基本数据类型而言)。它也具有块级作用域。不过,如果
const
声明的是一个对象或数组,虽然不能重新赋值整个对象或数组,但对象的属性或数组的元素是可以修改的。
- 举例说明:
// 使用let
{
let num = 10;
console.log(num); // 输出: 10
num = 20;
console.log(num); // 输出: 20
}
// console.log(num); // 这里会报错,num超出了其块级作用域
// 使用const
{
const str = 'hello';
console.log(str); // 输出: hello
// str = 'world'; // 这里会报错,const声明的变量不能重新赋值
const arr = [1, 2, 3];
arr.push(4);
console.log(arr); // 输出: [1, 2, 3, 4],可以修改数组元素
const obj = {name: 'Alice'};
obj.age = 30;
console.log(obj); // 输出: {name: 'Alice', age: 30},可以修改对象属性
}