避免全局作用域变量污染的核心是防止变量落入全局空间,需用let/const替代var、启用严格模式、“use strict”、使用立即执行块或esm模块封装,并最小化模块导出接口。

避免全局作用域变量污染,核心是不让变量“掉进”全局空间。JavaScript 默认宽松,但只要养成几个关键习惯,就能从源头堵住泄漏。
用 let 和 const 替代 var 声明
var 声明的变量会提升(hoisting)并绑定到函数或全局作用域,容易跨块泄露;而 let 和 const 具备真正的块级作用域——只在 {}、if、for、switch 等内部有效。
-
if (true) { let x = 1; } console.log(x);→ 报错:ReferenceError,安全 -
if (true) { var y = 2; } console.log(y);→ 输出2,已污染全局/函数作用域 - 循环中尤其明显:用
let i的for每次迭代都创建新绑定,避免闭包取值错误
启用严格模式("use strict")
严格模式让“未声明就赋值”直接报错,而不是悄悄挂到 window 或 globalThis 上。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 脚本开头加
"use strict";,整段代码生效 - ESM 模块(
.mjs或<script type="module"></script>)默认启用,无需手动写 -
count = 10;(没声明)→ 立即ReferenceError,不给污染机会 - 所有变量必须显式用
let、const或(不推荐)var声明
主动封装,不依赖函数也建干净作用域
不用等函数定义,任意花括号都能隔离变量:
- 立即执行块:
{ const API_URL = 'https://api.example.com'; fetch(API_URL); } - switch 分支加
{}:case 'a': { const msg = 'hello'; break; },各分支互不干扰 - IIFE(旧项目兼容):
(function() { "use strict"; let temp = 'safe'; })(); - 模块化优先:ES6 Modules 天然限制顶层声明不挂全局,比任何包裹都可靠
模块导出最小接口,隐藏内部实现
即使用了模块,若导出太多,等于变相暴露全局命名空间:
- 只导出真正需要被外部调用的函数或类,如
export function init() - 配置项、工具函数、临时状态全留在模块内部,用
const或let声明 - 避免在模块顶层执行副作用逻辑(如自动注册、修改
window),改用按需调用的初始化函数
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










