最可靠的方式是启用严格模式并配合显式声明与模块化结构:加"use strict"可使未声明赋值立即报错,模块默认严格模式且顶层变量私有,辅以eslint或typescript静态检查阻断隐式全局。

最可靠的方式是启用严格模式,配合显式声明和模块化结构。它不是靠经验提醒,而是让错误在运行时立刻中断,避免变量悄悄挂到 window 或 globalThis 上。
加 "use strict" 激活语法级防护
在脚本顶部或函数开头加上这行代码:
- 未声明就赋值(如
count = 10)会立即抛出ReferenceError,而不是变成window.count -
eval内部声明的变量不再泄漏到外层作用域 - 对只读属性赋值、给不可扩展对象添加属性等操作也会报
TypeError,防止误改全局对象
所有新变量都必须显式声明
不管在哪一层作用域,都不要省略关键字:
- 写
const result = x + y,而不是result = x + y - 警惕链式赋值陷阱:例如
let a = b = 0实际上等价于let a; b = 0,b是隐式全局——正确写法是let a, b; a = b = 0 -
var声明的全局变量无法被delete删除,而隐式创建的可以,说明后者本质是全局对象的可删属性,不是真正变量
优先使用 ES 模块(ESM)
把代码组织成 .js 模块文件或用 <script type="module"></script> 加载:
- 模块顶层的
const、let、function默认私有,不会自动挂到window - 模块默认启用严格模式,即使不写
"use strict",未声明赋值也直接报错 - 暴露功能必须通过
export显式导出,导入必须用import明确声明依赖,逻辑边界清晰
辅助工具增强保障
单靠人工容易疏漏,建议叠加静态检查:
- 用 ESLint 配置
no-implicit-globals和no-unused-vars规则 - TypeScript 编译阶段就能捕获未声明即使用的错误
- CI 流程中加入 lint 检查,阻断带隐式全局的代码合入主干
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











