优化全局变量是防止JavaScript内存泄漏最直接有效的手段:启用严格模式杜绝隐式全局变量,用ES6模块封装状态,及时解引用并提供destroy方法,辅以WeakMap/WeakRef管理弱关联。

优化全局变量是防止 JavaScript 内存泄漏最直接有效的手段之一。全局变量生命周期与页面一致,只要没被显式释放,就一直驻留在内存中,且无法被垃圾回收器清理。
用严格模式杜绝隐式全局变量
未声明就赋值的变量会自动挂到 window(浏览器)或 globalThis 上,形成难以察觉的全局引用。
- 在所有脚本顶部添加
"use strict",让这类错误直接抛出异常,而不是静默创建全局变量 - 避免使用
this在非构造函数/非箭头函数中指向全局对象的写法,例如function foo() { this.x = 1 }(非严格模式下会污染全局) - 启用 ESLint 规则
no-implicit-globals和no-unused-vars,自动检测未声明变量和未使用变量
把全局状态封装进模块作用域
不把数据直接挂在 window 上,而是通过模块边界控制访问权限和生命周期。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用 ES6 模块(
export/import)替代 IIFE 或var声明的“伪模块” - 将配置、缓存、工具实例等统一收口到单例类或工厂函数中,暴露可控的 getter/setter 或销毁方法
- 例如:用
const cache = new Map()替代window.cache = {},再配合cache.clear()主动释放
及时解引用并提供清理入口
即使必须用全局变量(如第三方库注册、调试标记),也要确保它可被主动置空。
立即学习“Java免费学习笔记(深入)”;
- 对大型对象、DOM 引用、事件处理器等,明确设计
destroy或teardown方法 - 在组件卸载、路由离开、页面隐藏(
visibilitychange)等时机调用清理逻辑 - 示例:
window.myAppInstance = null或delete window.myAppInstance(后者慎用,仅适用于非配置属性)
用 WeakMap / WeakRef 管理弱关联
当需要为某些对象附加元数据但又不想阻止其被回收时,避免强引用。
-
WeakMap键必须是对象,且不阻止键对象被回收;适合存储 DOM 节点私有状态 -
WeakRef+FinalizationRegistry可监听对象是否已被回收,用于日志或资源清理 - 注意:这些不能替代主动清理,只是辅助降低强引用风险

















