2014-08-29 39 views
4

我有一個自主的基於socket.io的類對象,它接受服務器端套接字的數組,然後只是偵聽客戶端消息併發迴響應給客戶端。要運行這個功能,我只需要通過調用下面的函數來創建該對象的實例,就像這樣:在JavaScript中的匿名對象的生命週期

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

我知道,這不是一個好的做法,但它的作品,只是在科學的名義我想問: 沒有變量保持引用該對象的實例,爲什麼它不是垃圾收集,它將在什麼時候(如果曾經)?

+0

您正在使用Node.Js,您將保證指數級內存泄漏。 – 2014-08-29 05:14:13

+0

你爲什麼說這是不好的做法? – 2014-08-29 05:21:26

回答

3

通常,在套接字上偵聽將使偵聽器保持活動狀態。偵聽器函數/閉包/對象可能包含對相關對象的引用,可能直至NetworkManager本身。

這樣,處理網絡事件實際所需的對象結構部分將保證一直保持活動狀態,直到聽衆未註冊爲止。但是,頂級NetworkManager實例可能不是其中的一部分,並且確實非常快速地收集垃圾。

1

實例向另一個對象註冊自己。因此它被引用並且不會被垃圾收集。這是使用事件偵聽器時的典型場景。