2014-01-23 35 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'是一個全局變量,我們就會遇到問題,因爲會有覆蓋時無法清除的間隔。由於它是本地的,我們沒有這個問題。 –