核心是不让变量“掉进”全局作用域;启用严格模式("use strict")让隐式赋值报错而非挂window,ES模块天然隔离顶层作用域,IIFE封装老代码,优先用let/const替代var。

核心是不让变量“掉进”全局作用域——浏览器里一不留神,count = 10 或 var config = {} 就会变成 window.count 和 window.config,污染命名空间、引发覆盖、增加调试成本。
启用严格模式("use strict")
这是最基础也最关键的防线。它让隐式全局赋值直接报错,而不是悄悄挂到 window 上。
- 脚本顶部加
"use strict";,整段脚本进入严格模式 - 函数内第一行写
"use strict";,只约束该函数作用域 - ES 模块(
<script type="module">或.mjs文件)默认启用严格模式,无需手动添加 - 写
userId = "abc"(未声明)→ 立即抛ReferenceError,而非静默创建window.userId
用 ES 模块替代传统 script 标签
模块天然隔离顶层作用域,是最现代、最彻底的解决方案。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 所有
const、let、function声明默认私有,不会出现在window上 - 必须显式
export,再由其他模块import使用,依赖关系清晰可查 - 改用
<script type="module" src="main.js"></script>替代<script src="main.js"></script> - 支持 tree-shaking、类型推导和静态分析,长期维护更可靠
用 IIFE 封装非模块化代码
对老项目、第三方脚本或无法立即模块化的代码,IIFE 是简单有效的兜底方案。
立即学习“Java免费学习笔记(深入)”;
- 写成
(function() { "use strict"; /* 所有逻辑放这里 */ })(); - 内部定义的变量、函数完全与
window隔离 - 如需暴露接口,只主动挂一个命名空间对象:比如
window.MyApp = { init(), utils },避免零散挂载 - 配合 ESLint 规则
no-implicit-globals可自动检测隐式全局
声明时优先用 let/const,禁用 var
var 的函数作用域和变量提升容易导致意外泄漏,而 let/const 具备块级作用域,更可控。
-
if (true) { let x = 1; }→ 外部访问x报错,安全 -
if (true) { var y = 2; }→y提升并绑定到函数或全局作用域,风险高 - 循环中用
for (let i = 0; ...)能避免闭包取值错误,也是作用域隔离的一环 - 建议开启 ESLint 的
no-var规则,强制使用let/const

















