用 let 和 const 替代 var 可实现块级作用域,避免变量提升和跨块干扰;var 声明变量会提升并绑定到函数或全局作用域,而 let/const 仅在声明所在块(如 {}、if、for)内有效。

用 let 和 const 替代 var,能天然限制变量在块级(如 {}、if、for、函数等)内生效,避免意外覆盖或提前访问,从而防止变量污染。
块级作用域让变量“关进笼子”
var 声明的变量会提升(hoisting)并绑定到函数或全局作用域,容易跨块干扰;而 let 和 const 只在声明所在的块(包括 if、for、switch、任意 {})中有效:
if (true) { let x = 1; } console.log(x); // ReferenceError: x is not definedfor (let i = 0; i- 同一作用域内重复声明
let或const会直接报错,而不是静默覆盖
用 const 优先,只在需重赋值时用 let
const 表示“绑定不可变”,不是“值不可变”。它强制你明确哪些数据不该被重新指向,减少误改风险:
- 对象/数组本身可修改:
const obj = {}; obj.name = 'Alice'; // ✅ 合法 - 但不能重新赋值:
obj = {}; // TypeError - 函数、正则、基本类型(string/number/bool)都适合用
const声明 - 循环计数器、临时计算结果等需改变的变量才用
let
避开常见污染陷阱
传统 var 写法容易引发问题,let/const 能直接堵住漏洞:
-
循环中回调取值错误:用
var i的for循环里,所有异步回调共享同一个i;改用let i每次迭代都有独立绑定 -
条件块变量泄露:
if (cond) { var tmp = 'x'; } console.log(tmp); // 可能意外访问到→ 改用let tmp就安全了 -
全局命名冲突:模块顶部不用
var声明全局变量,避免污染window(浏览器)或global(Node)
配合块语句主动隔离逻辑
不依赖函数也能创建干净作用域:
- 用立即执行块封装临时变量:
{ const API_URL = 'https://api.example.com'; fetch(API_URL); } - 在
switch每个case后加{},让各分支变量互不干扰 - 配置对象解构时也用
const:const { timeout = 5000, retries = 3 } = options;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











