許多文章(例如msdn)都表示,某些瀏覽器無法清除循環引用,因爲它涉及到DOM對象和JS對象。JQuery垃圾收集 - 這會乾淨嗎?
(IE 6不能做它在所有和IE7只能頁面請求之間做):
的Javascript原生(泄漏):
function leak(){
var elem = document.createElement("DIV");
document.body.appendChild(elem);
elem.onclick = function() {
elem.innerHTML = elem.innerHTML + ".";
// ...
};
}
因爲元素的onload屬性是指通過一個閉合回自身,它創建一個循環引用:
elem [DOM] -> elem.onclick [JS] -> elem [DOM]
JQuery的版本(不漏):
function leak(){
var elem = $('<div></div>');
$(document.body).append(elem);
elem.click(function() {
elem.html(elem.html() + ".");
// ...
};
}
在這種情況下,jQuery的停止泄漏在甚至涉及所有瀏覽器發生,雖然仍有循環引用:
elem [JS] -> element [DOM] -> elem.onclick [JS] -> elem [JS]
我的問題:如果仍有循環引用,jQuery如何停止泄漏?
因此,它刪除元素並打破IE6/6的循環引用。感謝您的洞察力 – 2010-08-11 12:21:57