IE事件註冊相關的記憶體洩露總結

2021-08-25 21:13:18 字數 898 閱讀 1892

經過一上午的艱苦試驗驗證,得出如下結論:

1、將元素傳入閉包,並在其中註冊事件,這是導致記憶體洩露的根源之一;另一必要條件是:元素必須脫離文件樹,亦即類似執行了語句:

elm.parentnode.removechild(elm)

2、解決方式:避免上述情形;在window.onunload中取消事件註冊。

示例如下:

1、

以上是dom2的事件註冊方式,再來看看dom1的:

當然,如果你願意,完全可以把'onclick'換成任意乙個你喜歡的屬性:

如果不把test傳入閉包,則不會洩露:

var test=document.getelementbyid('test');

(function();

})();//不將test傳入閉包

當然,如果這個元素始終在doucument樹中,也不會洩露:

function leak()

最後,如果你這麼寫,當然也不會洩露:

//作用域b

};})(test);//將test傳入閉包

//a引用test,test引用了hander,hander通過作用域b又引用了a,形成了迴路。

//由此可以引出如下例子,它也會洩露:

(function();

})();

IE8中的記憶體洩露

最近開發的時候對頁面使用了定時的區域性更新,結果在ie6,7和firefox下,一切正常,而在ie8下過上幾個小時就瀏覽器就崩潰了,顯示是記憶體溢位,我以為是 寫的不好導致記憶體洩露,但是ie6,7又正常,調查了一下,原來這是ie8的bug。size large 問題點 size 在ie8中,生成特...

元素相關的方法和註冊事件和移除事件

今天學習了註冊事件和移除事件的3種方式 1.addeventlistener event,fn,false 這個ie8不相容 2.attachevetnt event,fn 這個只能ie8用 移除事件 1.removeeventlistener event,fn,false 這個ie8不相容 2de...

魔鬼的夢魘 驗證IE中的JS記憶體洩露 二

魔鬼的夢魘 驗證ie中的js記憶體洩露 二 閉包往往是需要為記憶體洩露負責的,因為使用它會很容易產生不為程式設計師所發現的迴圈引用。父函式的引數和區域性變數將會一直被凍結 引用和持有,知道閉包本身被釋放,這並不是顯而易見的。事實上閉包已經變成如此普遍的變成策略,以至於開發人員經常的深陷問題之中,但是...