CommonJS天然防止全局变量污染,因每个模块拥有独立作用域,顶层声明的变量仅在模块内有效;真正风险来自显式挂载global、隐式全局赋值或第三方库副作用。

CommonJS 本身不引发全局变量污染,反而天然防止它——每个模块文件默认拥有独立作用域,顶层声明的 var、let、const 和 function 都只在该模块内有效,不会自动挂到 global 上。
模块作用域是默认隔离的
CommonJS 模块通过 module.exports 显式导出内容,未导出的变量完全私有:
// utils.js
const apiKey = 'secret_123'; // ✅ 不会泄漏到 global
let counter = 0;
function increment() {
return ++counter;
}
module.exports = { increment }; // ❌ apiKey 和 counter 不可被外部访问
真正风险来自显式挂载到 global
污染通常发生在开发者主动把东西赋值给 global、globalThis 或(在 Node.js 中)GLOBAL:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
-
错误写法:直接赋值
global.MyUtil = {...}或GLOBAL.helper = fn -
隐式全局:未声明就赋值,如
cache = new Map()(严格模式下会报错,但非严格模式会挂到global) -
第三方库副作用:某些老库(如部分未适配 CommonJS 的工具包)可能自行向
global添加属性
安全实践建议
保持模块纯净,避免跨模块共享状态:
立即学习“Java免费学习笔记(深入)”;
- 始终用
const/let声明变量,禁用未声明赋值 - 启用
"use strict",让隐式全局直接抛错 - 如需跨模块共享配置或实例,统一通过
require()导入单例模块,而非挂全局 - 排查依赖:运行
node -e "console.log(Object.keys(global))"对比引入前后,识别意外注入
与浏览器环境的区别
CommonJS 运行在 Node.js,没有 window,只有 global;而浏览器中 <script> 默认共享 window。所以 CommonJS 的“防污染”能力来自模块机制本身,不是靠技巧补救——只要不主动碰 global,就基本安全。

















