Muchos artículos (por ejemplo, msdn) han dicho que una referencia circular no se puede limpiar en algunos navegadores cuando se trata de un objeto DOM y un objeto JS.JQuery Garbage Collection: ¿Esto será limpio?
(IE 6 no puede hacerlo en absoluto y que IE7 sólo puede hacerlo entre solicitudes de páginas):
Javascript nativo (Fugas):
function leak(){
var elem = document.createElement("DIV");
document.body.appendChild(elem);
elem.onclick = function() {
elem.innerHTML = elem.innerHTML + ".";
// ...
};
}
Debido a la propiedad onload del elemento se refiere de nuevo a sí mismo a través de un cierre, se crea una referencia circular :
elem [DOM] -> elem.onclick [JS] -> elem [DOM]
jQuery Versión (no se escapa):
function leak(){
var elem = $('<div></div>');
$(document.body).append(elem);
elem.click(function() {
elem.html(elem.html() + ".");
// ...
};
}
En este caso, jQuery se detiene la fuga suceda en todos los navegadores en cuestión a pesar de que todavía hay una referencia circular:
elem [JS] -> element [DOM] -> elem.onclick [JS] -> elem [JS]
Mi pregunta: ¿Cómo detiene jQuery la fuga si todavía hay una referencia circular?
Por lo tanto, elimina el elemento y rompe la referencia circular para IE6/6. Gracias por la visión –