·更新于 2026年4月21日· 86 次浏览 JavaScript性能
JavaScript 内存与闭包:从词法环境到泄漏排查
理解 `[[Environment]]`、捕获变量生命周期;常见泄漏场景(定时器、DOM 引用、全局 Map)与 Chrome DevTools 堆快照思路。
作者
ZHOU YI
函数创建时会保存对外层词法环境的引用;闭包使被捕获变量在函数存活期间无法被 GC。这是特性,也是泄漏温床。
典型泄漏
- 未清理的
setInterval/ 事件监听 - 全局容器(数组、Map)持续增长元素引用
- detached DOM 仍被 JS 引用
js
const cache = []
export function hold(el) {
cache.push(el) // 长期持有 DOM → 泄漏
}在浏览器中用 Memory → Heap snapshot 对比两次快照的 Retainers;Node 可用 --inspect 与 clinic heap 分析堆增长曲线。