有没有一种很好的方法来存储对象的引用?

时间:2015-10-25 19:29:56

标签: javascript

来自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是引擎盖下的,但有什么我应该注意的,它可能无法捕捉到吗?

1 个答案:

答案 0 :(得分:1)

这里你害怕的是参考图中的周期。 垃圾收集器可以处理循环,并且能够释放彼此引用的对象,但是没有从外部引用任何对象。

这与引用计数的内存管理不同,其中循环保留内存,必须用弱引用中断。

然而,这并不意味着他们不必关心内存泄漏,因为还有其他方法可以引入它们。