这个Javascript会导致内存泄漏吗?

时间:2016-02-22 22:23:15

标签: javascript memory

请注意,在以下代码中,子项获取对其父项的引用。将对父项的原始引用设置为null时会发生什么?父母是否留下来,因为孩子仍有积极参考?

的Javascript

var parent = function() {
  var self = this;
  self.runme = function() {
    document.getElementById('output').innerText = 'run me';
  }

  self.child = new child(self);

  return self;
}
var child = function(parent) {
  var self = this;
  var parent = parent;
  self.event = function() {
    parent.runme();
  }
}
var p = new parent();
p.child.event();
p = null;

HTML

<div id="output">
  old value
</div>

FIDDLE https://jsfiddle.net/jeljeljel/8fvy5r4f/

2 个答案:

答案 0 :(得分:2)

var p = new parent();
p.child.event();
p = null;

最终父母和孩子都将被垃圾收集,因为父母和孩子都不会“可以”到达。这里没有内存泄漏。假设您正在处理现代JavaScript解释器。

答案 1 :(得分:1)

不应该这样,因为大多数垃圾收集器都基于reachability的想法。基本上,如果无法从图的根访问该对象,则可以安全地收集该对象。初始化后,您可以创建如下图形:

root -> parent <-> child

然后在p = null后得到这个:

root X parent <-> child

由于parent及其家属都无法获得,因此可以安全地收集它们。