let声明变量具有块级作用域,绑定到最近的{}内,存在暂时性死区,不可重复声明但可重新赋值,适用于需限制作用域且值会变化的场景。

用 let 声明变量时,它会绑定到最近的块级作用域(即一对花括号 {} 内),而不是函数或全局作用域。这和 var 的函数作用域有本质区别。
let 只在块内有效
只要变量用 let 在某个代码块中声明,它就只在这个块里能访问,块外访问会报错(ReferenceError)。
-
注意:不是“不可访问”,而是根本不存在——
let有暂时性死区(TDZ),块开始到声明前都不能使用 - 常见块包括:
if、for、while、switch语句的花括号,以及显式写的{...}
for 循环中 let 的典型用法
这是最常体现块级作用域优势的场景。每次迭代都会创建一个新的绑定,避免闭包中变量共享的问题。
- 用
var:所有回调共用同一个i,最后输出全是3 - 用
let:每次循环的i是独立绑定,输出0、1、2
不能重复声明,但可重新赋值
在同一块级作用域中,不能用 let 重复声明同名变量,否则报错;但可以修改它的值。
立即学习“Java免费学习笔记(深入)”;
-
let x = 1; let x = 2;→ 报错 -
let x = 1; x = 2;→ 合法 - 不同块中可以同名声明,互不影响
与 var 和 const 的对比要点
let 是介于 var 和 const 之间的选择:
- 不像
var:不提升、不绑定到函数作用域、无变量污染 - 不像
const:允许后续赋值(但不能重新声明) - 适用场景:需要块级限制、且值会变化的变量,比如循环计数器、条件分支中的临时变量


















