JavaScript中块级作用域由let和const配合{}实现,变量仅在声明的{}内有效;var不受{}限制,只遵循函数作用域;if、for等控制结构的{}天然构成块作用域。

JavaScript 中块级作用域靠 let 和 const 配合大括号 {} 实现变量的“关起门来用”——声明在 {} 里的变量,出了这个 {} 就找不到。
用 let/const 声明才真正受块限制
var 不行,它只认函数边界;而 let 和 const 才把 {} 当成一道实打实的墙:
- if (true) { let x = 100; console.log(x); } → 里面能用,外面
console.log(x)直接报ReferenceError - 同理,
const PI = 3.14159写在 {} 里,块外访问就失败 - 哪怕只是空花括号:
{ let temp = "hello"; },temp 也活不过这行右大括号
控制结构的花括号天然就是块边界
不用额外加 {},if、for、while、switch 的花括号体本身就能形成独立作用域:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
for (let i = 0; i → 循环结束后 <code>i不可访问-
if (condition) { const flag = true; }→ flag 只属于这个 if 分支,不会泄露到外层 - 每个 for 循环迭代还生成独立绑定,避免闭包中常见的“i 总是最后值”问题
注意临时死区(TDZ)和重声明限制
let/const 不仅限作用域,还改变变量生命周期:
立即学习“Java免费学习笔记(深入)”;
- 在声明语句执行前访问该变量(比如写在 let 前面),会触发 ReferenceError,不是 undefined
- 同一块内不能重复用 let 声明同名变量,但嵌套块可以遮蔽外层同名变量
- const 声明必须初始化,且不能重新赋值(对象属性仍可修改)
别让 var 或隐式声明破坏块隔离
看似在 {} 里,但一用错关键字,就等于没关门:
-
if (true) { var y = 20; }→ y 会提升到函数或全局作用域,块外依然能读 -
if (true) { z = 30; }(没加任何关键字)→ z 成为全局变量,污染整个环境 - 想真正隔离,必须从声明方式上守住关口:只用 let/const,不依赖 var 或省略关键字

















