来自iOS,我常常在对象之间使用弱引用,因此我可以从任何地方访问数据,而不用担心引用周期。
不是100%肯定Javascript如何使用这样的东西:
function One () {
this.hello = 'hi from one';
this.two = new Two(this);
}
function Two (one) {
this.one = one;
}
Two.prototype.sayHi = function () {
console.log(this.one.hello);
}
var o = new One();
o.two.sayHi(); // Outputs: hi from one
这个 有效,但还有更好的方法吗?我应该担心这里的记忆吗?在iOS中不小心做同样的事情会让我们陷入困境。
奖励:如果这实际上是安全的,Javascript是否有泄露内存的方式?我知道它的GC是引擎盖下的,但有什么我应该注意的,它可能无法捕捉到吗?
答案 0 :(得分:1)
这里你害怕的是参考图中的周期。 垃圾收集器可以处理循环,并且能够释放彼此引用的对象,但是没有从外部引用任何对象。
这与引用计数的内存管理不同,其中循环保留内存,必须用弱引用中断。
然而,这并不意味着他们不必关心内存泄漏,因为还有其他方法可以引入它们。