簡體   English   中英

內部引用對象上的Javascript垃圾收集器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM