javascript中匿名对象的生命周期

时间:2014-08-29 05:10:55

标签: javascript node.js

我有一个基于socket.io的自主类对象,它接受一组服务器端套接字,然后只是监听客户端消息并将响应发送回客户端。要运行此功能,我只需要通过调用以下函数来创建此对象的实例,如下所示:

function CreateNetworkGame(clients) {
    new NetworkManager(clients);
}

我知道,这不是一个好习惯,但它的确有效,而且只是以我想问的科学名义:  没有变量保持对对象实例的引用,那么为什么它不是垃圾收集的,什么时候会(如果有的话)?

2 个答案:

答案 0 :(得分:3)

通常,监听套接字会使监听器保持活动状态。侦听器函数/闭包/对象可能包含对相关对象的引用,可能最多为NetworkManager本身。

这样,处理网络事件实际所需的对象结构部分保证在侦听器未注册之前保持活动状态。但是,顶级NetworkManager实例可能不是它的一部分,并且确实很快就会收集垃圾。

答案 1 :(得分:1)

实例将自己注册到另一个对象。因此它被引用并且不会被垃圾收集。这是使用事件侦听器时的典型场景。