·更新于 2026年4月21日· 86 次浏览 JavaScript性能

JavaScript 内存与闭包:从词法环境到泄漏排查

理解 `[[Environment]]`、捕获变量生命周期;常见泄漏场景(定时器、DOM 引用、全局 Map)与 Chrome DevTools 堆快照思路。

JavaScript 内存与闭包:从词法环境到泄漏排查
ZHOU YI

作者

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 分析堆增长曲线。

Guestbook

留言

若这篇文章也曾停在你心上,留一行字吧,我会看的。

先确认一下邮箱

多这一步,是为了少些机器骚扰,也让我能更踏实地读每一条真人写下的字。验证码 10 分钟内有效;同一邮箱 60 秒内只能发一封。

本文留言

0已加载 0

这里还静悄悄的——愿意做第一个留下脚印的人吗?