2014-01-23 37 views
1

的JavaScript代码:setInterval处理程序是否考虑了内存泄漏?

function blah() 
{ 
    var blahInterval = setInterval(function(){ 
     if(some_global_variable == 5) 
      clearInterval(blahInterval); 
    }, 1000); 
} 

我有这样的代码有多个变种,它会在脚本的NodeJS被称为极大数倍。 clearInterval之后我是否需要delete blahInterval;

这是内存泄漏吗?或者一旦setInerval函数超出范围,GC将清除它?

回答

2

当超出范围时,GC应将其清除。只要if条件可以是错误的以清除间隔。我不会认为它是内存泄漏。

+0

全局变量随某些外部事件而改变,所以这个setInterval处理程序可能会执行一次或几百次!所以问题是“什么时候blahInterval超出范围?” – ItsMe

+0

每个函数调用'blah()'创建一个本地'blahInterval'。因此,考虑到if语句相同,每个人都会在同一时间超出范围。如果'blahInterval'是一个全局变量,我们就会遇到问题,因为会有覆盖时无法清除的间隔。由于它是本地的,我们没有这个问题。 –