这会导致JavaScript内存泄漏吗?

时间:2011-07-13 00:22:52

标签: javascript jquery memory-leaks

我在代码中大量使用了几个函数。现在,因为我正在寻找高内存使用的来源,我想确保他们不是罪魁祸首。

使用jQuery,我绑定并触发body元素上的自定义事件。触发事件时,我将其存储在触发事件列表中。我使用的辅助函数之一称为“waitfor”。这是一些伪代码:

waitfor = function(event, callback){

  if(event_has_ever_been_called){
    callback(); //RUN IMMEDIATELY
  }
  else{
    //BIND CALLBACK TO RUN AS SOON AS THE EVENT IS TRIGGERED
    $("body").bind(event, function(){
      callback();
    });
  }
}

例如,

//ADD GOOGLE MAP TO PAGE
... listen for the google map 'idle' event, 
... then call $("body").trigger("gmap.ready") 

//ADD MARKERS AS SOON AS POSSIBLE (BUT NOT BEFORE)
waitfor("gmap.ready", function(){
  //add markers
});

这对我来说似乎非常简单但是我有点担心它(或者我使用匿名回调函数的任何其他函数)可能导致高内存使用。

这是否足以确定此功能是安全/不安全的?

1 个答案:

答案 0 :(得分:0)

您应该在事件触发后调用one而不是bind来删除处理程序。

否则,你的函数以及它的闭包所引用的所有内容将永远被jQuery的处理程序列表引用。