匿名对象在JavaScript中的生命周期
我有一个自主的基于socket.io的类对象,它接受一个服务器端套接字的数组,然后只是侦听客户端消息,并将响应发回到客户端。 为了运行这个function,我只需要通过调用如下函数来创build这个对象的一个实例:
function CreateNetworkGame(clients) { new NetworkManager(clients); }
我知道,这不是一个好的做法,但它的工作原理和我想问的科学名称:没有variables保持参考对象的实例,为什么它不是垃圾收集,什么时候会(如果有的话) ?
一般来说,侦听套接字将使侦听器保持活跃状态。 监听器函数/闭包/对象可能包含对相关对象的引用,可能直到NetworkManager
本身。
通过这种方式,处理networking事件实际所需的对象结构部分将保证处于活动状态,直到听众未注册为止。 但是,最高层的NetworkManager
实例可能并不是其中的一部分,并且确实非常快速地收集垃圾信息。
该实例向另一个对象注册自己。 因此被引用,不会被垃圾收集。 这是使用事件侦听器的典型场景。