优先用 const,仅当变量需后续重新赋值时用 let;两者均为块级作用域,均存在暂时性死区,const 声明后不可重赋值但可修改对象属性。

选 let 还是 const,关键看变量是否需要后续重新赋值;作用域上两者完全一致,都是块级作用域。
作用域:let 和 const 完全一样
两者都只在声明所在的 {} 内有效,包括:
-
if、else、switch的代码块 -
for、while循环体(含for (let i...)中的循环变量) - 独立的代码块,比如
{ let x = 1; console.log(x); } -
try/catch中的catch参数和块内声明
一旦离开这个 {},变量就不可访问——这点和 var 的函数/全局作用域有本质区别。
可变性:核心区别在这里
const 表示“声明时必须初始化,且绑定不能被重新赋值”;let 允许声明后多次赋值。
-
const a = 10;→ 合法;a = 20;→ 报错:Assignment to constant variable -
let b = 10;→ 合法;b = 20;→ 合法;b = 30;→ 依然合法 -
const obj = { x: 1 };→ 合法;obj.x = 2;→ 合法(改属性不等于重赋值);obj = {};→ 报错
声明时机与暂时性死区(TDZ)
let 和 const 都存在暂时性死区:在声明语句执行前,变量名已绑定但不可读取。
-
console.log(x); let x = 1;→ 报错:Cannot access 'x' before initialization -
console.log(y); const y = 2;→ 同样报错,行为一致 - 这不同于
var的“提升+默认undefined”,更安全,也更符合直觉
怎么选:一条简单原则
默认优先用 const;只有明确知道该变量后续要重新赋值时,才用 let。
- 计数器、临时中间值、循环变量(如
for (let i = 0; ...))→ 用let - 配置项、DOM 引用、API 响应结果、对象/数组(只要不打算
=新值)→ 用const - 即使内容是对象或数组,只要不替换整个引用,
const就完全适用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











