防止全局作用域污染的核心是不把变量或函数直接挂到全局环境里,主要通过启用严格模式、使用ESM模块、IIFE封装及避免var顶层声明等手段实现。

防止全局作用域污染 window 对象,核心是**不把变量或函数直接挂到全局环境里**。浏览器中未声明就赋值(如 count = 10)或用 var 在顶层声明,都会变成 window.count 或 window.myFunc,这是污染的主因。
启用严格模式,让隐式赋值立刻报错
严格模式是第一道防线:它禁止未声明就赋值,一写就报错,不给挂到 window 的机会。
- 脚本级启用:在
<script>标签最开头加"use strict"; - 函数级启用:在函数体第一行写
"use strict";,只约束该函数 - ESM 模块(
.mjs或<script type="module">)默认严格,无需手动加 - 写
count = 10;(count没声明过)→ 直接抛ReferenceError,而不是默默变成window.count
用模块化(ESM)替代传统 script
ES6 模块天然隔离全局空间:顶层的 let、const、function 不会成为 window 属性,只在模块内有效。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 把代码拆成
utils.js、main.js等文件,用export/import - 即使导出一个函数,也必须显式
import才能用,不会自动出现在window上 - 避免用
<script src="xxx.js">加载,改用<script type="module" src="xxx.js">
用 IIFE 封装老代码或非模块脚本
对不支持模块的老项目或第三方脚本,用立即执行函数包裹,制造私有作用域。
立即学习“Java免费学习笔记(深入)”;
- 基本写法:
(function() { "use strict"; /* 所有代码放这里 */ })(); - 内部定义的变量(
let data = [];)、函数(function helper() {})完全与window隔离 - 如果真要暴露接口,只挂一个命名空间对象:
window.MyLib = { init(), config };,而不是一堆零散变量
避免常见污染行为
有些写法看着“没声明”,其实悄悄污染了 window,要特别注意:
- 不用
with和eval:严格模式已禁用,它们会动态创建绑定,绕过作用域控制 - 不覆盖原生方法:比如重写
window.isNaN = function(){},会影响整个页面行为 - 不依赖
this在普通函数中指向window:严格模式下this是undefined,避免意外修改全局 - 慎用
var顶层声明:虽然合法,但会变量提升并挂到window,优先用let/const+ 模块


















