JavaScript中应优先使用const,仅在需重新赋值时用let;二者均为块级作用域、存在暂时性死区、禁止重复声明,const声明后不可重新赋值但允许修改对象属性。

在 JavaScript 中,let 和 const 是用于声明块级作用域变量的关键字,它们取代了过去容易引发问题的 var(函数作用域、变量提升)。正确使用它们能避免意外覆盖、提升代码可读性和安全性。
let:声明可重新赋值的块级变量
let 声明的变量只在当前代码块(如 {} 内、if、for、while 等)中有效,且不会被提升(访问未声明前会报 ReferenceError)。
- 可在同一作用域内多次声明不同变量,但不能重复声明同名变量(会报
SyntaxError) - 允许后续重新赋值,适合需要修改值的场景(如循环计数器、临时状态)
- 在 for 循环中,每次迭代都会创建独立绑定,避免闭包常见陷阱
示例:
if (true) {
let x = 10;
console.log(x); // 10
}
console.log(x); // ReferenceError: x is not defined
const:声明不可重新赋值的块级常量
const 声明的变量也具有块级作用域,且必须在声明时初始化。它禁止对变量标识符进行**重新赋值**(即不能用 = 赋新值),但不等于“不可变”——对象或数组的内容仍可修改。
立即学习“Java免费学习笔记(深入)”;
- 适用于值确定后不再变更的配置、DOM 引用、函数、模块导入等
- 声明时必须赋值,否则语法错误
- 对对象/数组:可以修改其属性或元素,但不能把变量指向另一个内存地址
示例:
const PI = 3.14159;
// PI = 3.14; // TypeError: Assignment to constant variable.
const user = { name: 'Alice' };
user.name = 'Bob'; // ✅ 允许(修改对象属性)
// user = { name: 'Charlie' }; // ❌ 不允许(重新赋值整个变量)
let 和 const 的共同特点
二者都遵循块级作用域规则,且都存在“暂时性死区(TDZ)”:从块开始到声明语句执行前,变量不可访问。
- 在 TDZ 中访问变量会抛出
ReferenceError,而不是返回undefined - 不参与变量提升(hoisting),但引擎仍会记录声明,只是暂不初始化
- 不能在同一个作用域中重复声明同名变量(包括 let/const 混用)
错误示例:
console.log(a); // ReferenceError let a = 1;
什么时候用 let,什么时候用 const?
推荐默认使用 const,只有明确需要后续重新赋值时才改用 let。这是一种防御性编程习惯,有助于减少意外修改和提高逻辑清晰度。
- 函数参数、循环变量(
for (let i = 0; ...))、临时计算结果 → 多用 let - API URL、配置项、DOM 元素引用、函数定义、对象/数组初始结构 → 优先用 const
- 避免无理由使用 var,除非需兼容极老环境(如 IE8)


















