这会导致JavaScript内存泄漏吗?
我在代码中大量使用了几个函数。现在,在我寻找高内存使用率的来源时,我想确保它们不是罪魁祸首 使用jQuery,我绑定并触发body元素上的自定义事件。当一个事件被触发时,我将它存储在一个触发事件列表中。我使用的一个助手函数叫做“waitfor”。下面是一些伪代码:这会导致JavaScript内存泄漏吗?,javascript,jquery,memory-leaks,Javascript,Jquery,Memory Leaks,我在代码中大量使用了几个函数。现在,在我寻找高内存使用率的来源时,我想确保它们不是罪魁祸首 使用jQuery,我绑定并触发body元素上的自定义事件。当一个事件被触发时,我将它存储在一个触发事件列表中。我使用的一个助手函数叫做“waitfor”。下面是一些伪代码: waitfor = function(event, callback){ if(event_has_ever_been_called){ callback(); //RUN IMMEDIATELY } else{
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
});
这对我来说似乎非常简单,但我有点担心它(或我的任何其他使用匿名回调函数的函数)可能会导致内存使用率高
这些信息是否足以确定此函数是否安全?您应该在事件触发后调用而不是bind
来删除处理程序
否则,您的函数及其闭包引用的所有内容将永远被jQuery的处理程序列表引用。您是否设置了
event\u是否在某个地方被调用过
?不,这就是我所说的“伪代码”——不是实际代码,只是为了给您一个想法。好建议,SLaks——不过,我会在比赛结束后解开它。