[英]Javascript garbage collector on internally referenced object
我一直在閱讀關於javascript垃圾收集的許多SO問題,但這只是讓我感到有些困惑。 看看我的例子
var valueObject= (function(){
function valueObject(){
this.Text = 'hello';
}
return valueObject;
})();
var referenceObject = (function(){
function referenceObject (refObject){
this.Reference = refObject;
}
return referenceObject ;
})();
var globalClass = (function(){
function globalClass(){
}
globalClass.prototype.load() {
this.A = new valueObject();
this.B = new referenceObject(this.A);
}
globalClass.prototype.destroy() {
this.A = null;
this.B = null;
}
return globalClass;
})();
var Test = new globalClass();
Test.load();
Test.destroy();
現在一旦調用了Test對象destroy,是否會將valueObject和referenceObject標記為collection? 因為this.A = null
將刪除對valueObject的引用,但它仍然在this.B
有引用。 但是如果this.B = null
,則刪除對this.B
的引用,但是B
對象仍將在那里引用A
?
不確定這是否有意義,這對我來說有點混亂。 謝謝。
首先,通常只使用以大寫字母開頭的名稱作為構造函數,大多數情況下,代碼都具有向后的約定。
現在一旦調用了Test對象destroy,是否會將valueObject和referenceObject標記為collection?
Dunno關於“標記”,但可用,是的。
因為this.A = null將刪除對valueObject的引用
是
但它內部仍有參考.B
不,它沒有。
查看代碼(並修復錯誤):
globalClass.prototype.load = function () {
this.A = new valueObject();
this.B = new referenceObject(this.A);
}
首先, load方法添加一個A屬性,該屬性的值由對valueObject的調用返回, valueObject只是一個普通對象。
然后,它添加一個B屬性,該屬性引用另一個具有Reference屬性的對象,該屬性引用與A相同的對象。
但是如果調用this.B = null,則刪除對this.B的引用,但是B對象仍將在那里引用A?
是的,但由於現在沒有對以前由B引用的對象的引用,並且它是引用以前由A引用的對象的唯一對象,因此它們都可用於垃圾回收。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.