你如何清除Javascript中的内存?

Dav*_*ein 20 javascript memory

var Obj = function(){}; var X = new Obj();

X = null妥善清理记忆吗?

这也相同吗?

var Obj = function(){}; 
var X   = {}; 
X.obj   = new Obj();
delete(X.obj);
Run Code Online (Sandbox Code Playgroud)

编辑 看起来虽然删除X.obj不会立即清除内存,但它有助于垃圾收集.如果我不删除X.obj,仍然会有一个指向对象的指针,因此GC可能无法清除它.

虽然我正在接受@ delnan的答案,但如果你正在阅读这篇文章,那么你也应该阅读Benubird的文章.

我也注意到我不小心写了删除(X)而不是删除(X.obj) - 对不起.

小智 18

简短的回答是你没有.delete只是删除一个引用(而不是你尝试使用它的方式,请参阅上面的链接 - 这delete是很少有人真正理解的语言功能之一),仅此而已.实现为您清除了内存,但是当它(并且严格地说 - 这就是为什么人们不应该依赖于提供它们的GC语言中的终结器)时,这不是您的业务.请注意:

  • 只能删除所有代码都可以被证明无法访问(即无法访问它)的对象.从概念上讲,通常相当明显的是对谁的引用.你只需要注意何时处理大量的闭包,因为它们可能会捕获比你想象的更多的变量.另请注意,循环引用正确清理.
  • 旧版(但遗憾地仍然使用)IE版本中存在一个错误,涉及JS事件处理程序和DOM元素的垃圾收集.谷歌(甚至可能是SO)应该有更好的记忆材料.

从好的方面来说,这意味着你不会得到悬挂的指针错误或(当然,除了上述陷阱)内存泄漏.


Ben*_*ird 15

没有.

读这个:

http://perfectionkills.com/understanding-delete/

  • 虽然此链接可以回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会变得无效。 (2认同)
  • @Benubird 请检查[什么是仅链接答案?](https://meta.stackoverflow.com/questions/288055/please-define-link-only-answer) (2认同)