在 javascript 块级作用域中应使用 let 或 const 替代 var;let 声明可重新赋值的块级变量,具有块级作用域且不提升;const 声明不可重新赋值的常量,必须初始化,二者均禁止重复声明,优先使用 const。

在 JavaScript 块级作用域中,应使用 let 或 const 声明变量,避免用 var —— 因为 var 会忽略块级边界,造成意外提升和作用域污染。
用 let 声明可重新赋值的块级变量
let 绑定到最近的花括号({})内,包括 if、for、while、try/catch 等语句块。它不会被提升到块外,且在同一块中不可重复声明。
- ✅ 正确:在 if 块内声明,只在该块内有效
- ❌ 错误:在块外访问 let 变量会报
ReferenceError - ⚠️ 注意:for 循环中每次迭代都会创建新的绑定(适合闭包场景)
用 const 声明不可重新赋值的块级常量
const 必须在声明时初始化,且不能重新赋值。它也具有块级作用域,适用于不打算改变引用的变量(如对象、数组),但注意:const 不冻结内容,只是禁止重新赋值。
- ✅ 正确:
const obj = { a: 1 };后可改obj.a = 2 - ❌ 错误:
const x = 1; x = 2;会报TypeError - ? 建议:优先用 const,仅当确实需要重新赋值时才用 let
避开 var 的块级陷阱
var 声明会被提升到函数或全局作用域顶部,无视块结构。即使写在 if 块里,也能在块外访问,且多次声明不报错。
- ❌ 危险示例:
if (true) { var x = 1; } console.log(x); // 输出 1 - ✅ 替代写法:
if (true) { let x = 1; } console.log(x); // ReferenceError - ? 工具建议:启用 ESLint 规则
no-var,强制使用 let/const
嵌套块与作用域链的注意事项
块可以嵌套,内层块可访问外层块的 let/const,但同名声明会遮蔽(shadow)外层变量,不会修改它。
- ✅ 安全遮蔽:
let x = 1; { let x = 2; console.log(x); } // 输出 2 - ✅ 外层不变:
console.log(x); // 仍为 1 - ⚠️ 避免混淆:除非有意隔离,否则尽量不用同名变量遮蔽外层声明
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











