启用严格模式("use strict")并配合let/const声明和ES模块可彻底杜绝隐式全局变量污染:严格模式使未声明赋值报错,let/const避免变量提升和隐式挂载,模块作用域天然隔离顶层声明。

直接给未声明的变量赋值(比如 i = 10)会把该变量自动挂到 window.i(浏览器)或 globalThis.i(Node.js),这是全局污染最隐蔽也最常见的源头。解决它不靠事后清理,而要从执行机制上堵住入口。
启用严格模式强制报错
在脚本顶部加 "use strict",JavaScript 就会禁止隐式全局赋值:一旦写 count = 5 且 count 未声明,立刻抛出 ReferenceError,而不是悄悄塞进 window。
- 所有模块(
.mjs、<script type="module">)默认启用严格模式,无需手动加 - 传统
<script>标签中,必须显式写在第一行,且不能有空行或注释前置 - 函数级严格模式也有效,但推荐全脚本启用,避免遗漏
用 let/const 替代 var 声明
var 有变量提升且顶层声明即全局;let 和 const 没有提升,且顶层声明只属于当前作用域(模块内私有、非模块脚本中仍属全局但不会隐式挂 window)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 写
let apiHost = 'https://api.com'—— 不会变成window.apiHost - 写
var apiHost = 'https://api.com'—— 在非模块脚本中等价于window.apiHost - 即使漏掉声明关键字,严格模式也会拦截,双重保险
用模块封装替代裸脚本
把代码放进 ES 模块(type="module" 或 .mjs 后缀),顶层声明天然隔离:所有 const、let、function 都只在本模块内可见,不污染任何全局对象。
立即学习“Java免费学习笔记(深入)”;
- 模块中写
const TOKEN = 'abc'→ 其他文件访问不到,除非export - 模块中写
function validate() { }→ 不会出现在window.validate - 第三方库若强行挂载(如 jQuery 的
$),可用import $ from 'jquery'替代全局引用
检查并替换历史遗留赋值
老项目常见 data = []、utils = {} 这类无声明赋值。可借助工具扫描:
- ESLint 规则
no-implicit-globals能捕获未声明直接赋值 - 搜索正则:
^[ \t]*[a-zA-Z_$][a-zA-Z0-9_$]*\s*=\s*(配合行首锚点)快速定位可疑行 - 逐个补上
let或const,或包裹进 IIFE(仅作过渡,非长期方案)

















