2009-07-27 66 views
5

我已經讀了很多關於如何在各種版本的IE中創建內存泄漏。 一些偉大的信息可以在這裏找到:關於jQuery的,關閉和可能的內存泄漏

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 
     } 
    ); 
} 

回答

4

從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); 
    } 
}, 

,你可以看到,它會刪除所有事件處理程序和相關數據移除元素之前,它的子元素。

+3

關於調用.remove()方法,問題中沒有任何內容。 – 2009-08-29 19:08:37