关于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中创建内存泄漏:

  1. function foo(value) {
  2. var bar = document.getElementById("selector");
  3. bar.attachEvent("onclick",// closure
  4. function() {
  5. alert(value); // reference to 'value' from outer function scope
  6. }
  7. );
  8. }

以上示例的以下JQuery版本是否会导致IE6 / 7中的内存泄漏?

  1. function foo(value) {
  2. $('#selector').click(
  3. // closure
  4. function() {
  5. alert(value); // reference to 'value' from outer function scope
  6. }
  7. );
  8. }
最佳答案
来自jQuery 1.3源码:

  1. remove: function( selector ) {
  2. if ( !selector || jQuery.filter( selector,[ this ] ).length ) {
  3. // Prevent memory leaks
  4. jQuery( "*",this ).add([this]).each(function(){
  5. jQuery.event.remove(this);
  6. jQuery.removeData(this);
  7. });
  8. if (this.parentNode)
  9. this.parentNode.removeChild( this );
  10. }
  11. },

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

猜你在找的jQuery相关文章