关于jquery,闭包和可能的内存泄漏

前端之家收集整理的这篇文章主要介绍了关于jquery,闭包和可能的内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我已经阅读了很多关于如何在各种版本的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 );
    }
},

如您所见,它会在删除元素及其子元素之前删除所有事件处理程序和相关数据.

猜你在找的jQuery相关文章