JavaScript 新关键字和内存泄漏


let x = new MyClass();
...[more code]
let x = new MyClass();

MyClass 的第一个实例会自动收集吗? 还是我需要在第二次作业之前显式x = null或类似的东西,以避免内存泄漏?

JavScript 的内存是自动管理的,因此垃圾回收器会收集被视为"无法访问"的对象。

在您提供的示例中,存储在 x 中的对象将被垃圾回收,只要它无法从代码的其他部分访问(即,如果您将其放置在...[more code]行的全局范围内,则不会收集该对象,因为它仍然可以访问(。

大多数时候,您不必担心 JavaScript 中的显式内存管理,但是了解它确实重要的常见情况非常重要(请参阅 4 个常见泄漏(。

举个实际的例子,在大多数前端框架/库中,销毁由应用的短期组件创建的setInterval非常重要(即,当倒计时时钟从 DOM 中删除倒计时时钟时销毁该间隔(,因为这些间隔中的闭包可能会阻止收集对象。

最新更新