请注意,在以下代码中,子项获取对其父项的引用。将对父项的原始引用设置为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>
答案 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
及其家属都无法获得,因此可以安全地收集它们。