鍍金池/ 問答/HTML/ GC是如何回收DOM對(duì)象的?

GC是如何回收DOM對(duì)象的?

問題描述:
代碼如下:

        (function(){
            var btn = document.querySelector("#btn")
            btn.bigString = new Array(1000).join(new Array(2000).join("XXXXX"));
            btn = null
        })()

當(dāng)我在自執(zhí)行函數(shù)中往btn中添加了一個(gè)自定義屬性,然后在末尾都已經(jīng)置btn為null.按理說我這個(gè)大字符串btn.bigString會(huì)隨著btn一起被回收,為什么我在profile中看到的卻不是這樣子的?btn這個(gè)DOM對(duì)象完全沒有被回收,大字符串也還在。

clipboard.png

當(dāng)我將btn 替換成普通對(duì)象的時(shí)候,卻又是正常的,這個(gè)bigString 是被回收掉的。

        (function(){
            //var btn = document.querySelector("#btn")
            var btn = {}
            btn.bigString = new Array(1000).join(new Array(2000).join("XXXXX"));
            btn = null
        })()

profile:

clipboard.png

是我對(duì)于DOM對(duì)象 和js對(duì)象理解有誤嗎?我應(yīng)該如何釋放上面的DOM對(duì)象和bigString?

瀏覽器版本:

clipboard.png

回答
編輯回答
假灑脫

DOM元素是被頁面所使用的,頁面不被卸載(unload),DOM元素是不會(huì)被回收的。所以,btn=null只能讓btn這個(gè)變量不再引用id='btn'的DOM元素,但頁面依然在使用這個(gè)元素,當(dāng)然是不會(huì)回收這個(gè)元素對(duì)應(yīng)的對(duì)象的。

2017年10月6日 15:22