javascript 新关键字和内存泄漏?

javascript new keyword and memory leaks?

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

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

JavScript 的内存是自动管理的,因此被视为 "unreachable" 的对象由 garbage collector 收集。

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

大多数时候,您不必担心 JavaScript 中的显式内存管理,但是了解重要的常见情况很重要(请参阅 4 common leaks)。

作为一个实际示例,在大多数前端 frameworks/libraries 中,销毁由您的应用的短期组件创建的 setInterval 非常重要(即销毁倒计时时钟的间隔时钟已从 DOM) 中删除,因为这些间隔中的闭包可能会阻止收集对象。