许多文章(例如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