将子对象的父对象添加到侦听器会导致Node.js中的保留周期吗?

时间:2015-05-11 23:57:14

标签: javascript node.js events eventemitter retain-cycle

我不太熟悉Node.js中的保留周期来自Objective-C / iOS,但我写了一些代码,我希望导致保留周期。我不确定V8处理垃圾收集有多聪明,或者我应该对此有多聪明!

在我的示例中,我创建了一个对象,该对象应该处理数据连接并将该数据反馈给父对象。为此,我使用EventEmitter .on函数来注册父对象函数。处理完所有数据后会释放父对象,但之后会在父对象和子对象之间创建一个保留周期吗? 示例代码

// Create the SonarData with the necessary information
this.sonardata = new SonarData( this.key, this.size )

// Hook events
.on( 'error', this.handleError.bind( this ) )
.on( 'done', this.handleDone.bind( this ) )
.on( 'data', this.handleData.bind( this ) );

1 个答案:

答案 0 :(得分:5)

当释放父对象时,如果没有对子对象的其他引用,并且子对象上没有活动的消息处理程序,那么子对象将被垃圾收集得很好。 Javascript垃圾收集器在保留周期方面没有问题。它们的工作原理是代码是否仍可由任何其他活动代码访问。

因此,两个对象相互引用,但其他代码都无法访问这些对象将成功进行垃圾回收。