我已经阅读了很多关于如何在各种版本的IE中创建内存泄漏的内容.
一些很棒的信息可以在这里找到:
http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx
http://laurens.vd.oever.nl/weblog/items2005/closures/
使用JQuery的闭包是一种非常常见的做法.关于IE和内存泄漏,我找不到任何与JQuery的事件模型(大量使用关闭)有关的文章.上面发布的第二篇文章是一种在使用闭包时避免内存泄漏的策略.
JQuery是否已经实施了类似于文章中概述的策略,以帮助清理使用闭包时潜在的泄漏?或者是我必须注意和代码的东西?
例如,
在IE6 / 7中创建内存泄漏:
function foo(value) { var bar = document.getElementById("selector"); bar.attachEvent("onclick",// closure function() { alert(value); // reference to 'value' from outer function scope } ); }
以上示例的以下JQuery版本是否会导致IE6 / 7中的内存泄漏?
function foo(value) { $('#selector').click( // closure function() { alert(value); // reference to 'value' from outer function scope } ); }
最佳答案
来自jQuery 1.3源码:
remove: function( selector ) {
if ( !selector || jQuery.filter( selector,[ this ] ).length ) {
// Prevent memory leaks
jQuery( "*",this ).add([this]).each(function(){
jQuery.event.remove(this);
jQuery.removeData(this);
});
if (this.parentNode)
this.parentNode.removeChild( this );
}
},