let 声明

最后更新:2026-09-09

let 声明

let 用来声明一个块级作用域的变量:它只在自己所在的那对大括号 {} 里有效,出了大括号就访问不到,同一个作用域里也不能重复声明同名变量。这是 ES6 引入的现代写法,日常开发应优先用它代替 var。

分类变量声明
作用域块级作用域({} 内)
变量提升有提升,但存在暂时性死区,声明前访问会报错
重复声明同一作用域不允许
重新赋值允许
ES 版本ES6(2015)

📝 语法

let 变量名 = 初始值;

⚙️ 参数

变量名遵循标识符规则:以字母、下划线 _ 或美元符 $ 开头,区分大小写,不能使用保留字。
初始值可选。省略时变量值为 undefined,之后可以随时重新赋值。

返回值:不返回值,let 是一条声明语句而不是表达式。

是否修改原值:否(返回新值)

▶ 示例

编辑下方代码,点击运行,在输出面板查看结果:

运行结果:

2
只在块内可见
报错:ReferenceError
💡 提示 循环里用 let 声明计数器,每一次迭代都会创建一个新的绑定,配合 setTimeout 能拿到当次的值;换成 var 则会全部拿到最后一个值。
⚠️ 警告 同一作用域内重复 let 声明同一个变量名会直接抛出 SyntaxError,不像 var 那样静默覆盖——这能帮你提前发现命名冲突。

🌐 浏览器支持

浏览器 ChromeChrome EdgeEdge FirefoxFirefox SafariSafari OperaOpera
let v49 v12 v44 v10 v36
所有现代浏览器均支持
更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

Qlet 和 var 到底有什么区别?
A三点:一是作用域,let 是块级({} 内有效),var 是函数级甚至会挂到全局对象上;二是重复声明,let 不允许,var 允许;三是提升行为,let 存在暂时性死区,声明前访问直接报错,var 则是拿到 undefined 静默通过。
Q为什么在 let 声明之前使用变量会报错?
A从进入作用域到真正执行到 let 声明语句之间的这段区域叫暂时性死区(TDZ)。变量虽然已经被“登记”,但还没有初始化,此时访问就会抛出 ReferenceError。这是设计上的保护,能避免像 var 那样悄悄拿到 undefined 造成的隐蔽 bug。
Q循环里的 let 为什么每次都不一样?
A用 let 声明的循环变量,JavaScript 会在每一次迭代时创建一个新的副本并记住上一轮的值,所以每个闭包捕获到的都是各自那一轮的值;用 var 则整个循环共用一个变量,回调执行时只剩下最后一次的结果。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏