2013-02-12 85 views
2

在Javascript中,我的理解是,當頁面上不存在對它們的引用時,項目會被垃圾收集。如果一個對象的引用仍然存在,對象是否可以被垃圾收集?

var obj = { 
    arr: [1,2,3] 
}; 
var arr = obj.arr; 
obj = "hello"; 

在上面的代碼中,我已經將我的引用替換爲最初的obj對象。我不再有任何對該對象的引用。不過,我確實有一個關於該對象的數組的引用。對象一直保持到arr未被引用爲止?或者它可以被垃圾收集?

回答

4

可以收集「obj」值的對象,但它是一個單獨的對象,而不是對象(數組),它是「arr」的值。那個不會被收集。

一個對象可以獨立於其屬性引用的對象進行收集。

(嚴格地說,這一切都取決於收集器的詳細信息,但由於屬性值不包含對象的一部分,我會非常驚訝地得知收集器,將做到這一點的。)

+3

@stinkycheeseman請記住,'obj'裏面的'arr'實際上並不包含在'obj'內,它只是被'obj'引用。 – ajp15243 2013-02-12 20:23:36

相關問題