let和const声明变量可形成块级作用域,避免变量污染、泄漏及闭包问题;const绑定不可变但值可变;二者存在暂时性死区,需先声明后使用。

在 JavaScript 中,用 let 和 const 声明变量可自然形成块级作用域,有效避免变量污染——即防止变量意外覆盖、泄漏到外层或被重复声明。
块级作用域由大括号 `{}` 界定
if、for、while、switch 语句和任意用花括号包裹的代码块,都是独立的作用域边界。用 let 或 const 在其中声明的变量,只在该块内有效,外部无法访问。
-
✅ 正确示例:
if (true) { let x = 10; const y = 'hello'; }<br>console.log(x); // ReferenceError: x is not defined -
⚠️ 对比 var:
if (true) { var z = 20; }<br>console.log(z); // 20 —— var 会提升并泄漏到函数/全局作用域
避免循环中闭包导致的变量共享问题
使用 var 的 for 循环中,所有迭代共用同一个变量;而 let 每次迭代都绑定一个新绑定,更符合直觉。
-
✅ 推荐写法(输出 0, 1, 2):
for (let i = 0; i console.log(i), 0); } -
❌ 旧写法(输出 3, 3, 3):
for (var i = 0; i console.log(i), 0); }
const 不可重新赋值,但对象属性仍可修改
const 声明的是「绑定不可变」,不是「值不可变」。它同样具有块级作用域,且禁止重复声明或赋值,适合定义配置项、DOM 引用等。
-
✅ 安全用法:
if (condition) { const API_URL = 'https://api.example.com'; fetch(API_URL); } -
⚠️ 注意:
const obj = { a: 1 };<br>obj.a = 2; // ✅ 允许(对象内容可变)<br>obj = {}; // ❌ TypeError:不能重新赋值
不与 var 混用,避免暂时性死区(TDZ)陷阱
let 和 const 存在暂时性死区:从块开始到声明语句执行前,变量不可访问(哪怕用 typeof 查也会报错)。
-
❌ 错误示例:
if (true) { console.log(a); let a = 1; } // ReferenceError - ✅ 解决方法:确保声明出现在使用之前;不依赖变量提升逻辑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











