2011-07-11 58 views
5

我經常在第三方JavaScript代碼看到,經過:爲什麼在document.getElementById-ed之後,對象必須被禁止使用IE?

var el = document.getElementById(elementId); 

對象往往是歸零,並沿此操作發表評論說,這是對IE進行:

el = null; // IE 

什麼是真正的目的是什麼?任何資源?

+3

IIRC,這是因爲IE否則在閉包範圍內保留對_all_可訪問變量的引用,這會使其泄漏未使用的非空引用。 – zneak

回答

6

通過nixing一個引用,它們打破了DOM對象和JavaScript對象之間相應的循環依賴關係,這些依賴關係由較舊的IE中的不同子系統控制(因此不可能被垃圾收集)。

例如:

var el = document.getElementById(elementId); 
el.onclick = function() { // here the cyclic reference is created 
    /... 
}; 

JavaScript的子系統現在有一個參考el元件,和DOM子系統(所述el元件)具有對JavaScript對象的引用(函數加上它關閉在什麼)。

但是,如果您通過addEventListener添加偵聽器,則不必擔心。請參閱。

相關問題