2014-11-08 88 views
0

有一個函數animateTitle()可以每3秒鐘週期更改一次瀏覽器標題。遞歸函數緩衝區溢出

var animateTitle = function(countMessages) { 
    if (isChatTab) { 
     if (animStep) { 
      document.title = "New messages ("+countMessages+") - "+origTitle; 
     } else { 
      document.title = origTitle; 
     } 
     animStep = !animStep; 
    } else { 
      document.title = origTitle; 
      animStep = false; 
    } 

    time_title = setInterval(function(){ animateTitle(countMessages) }, 3000); 
}; 

在我的腳本帕拉姆countMessages是實時變化,並傳遞給函數animateTitle,所以這會導致緩衝區溢出,因爲該函數是遞歸的。怎麼修?

回答

1

當前,由於您沒有清除現有間隔,因此每個函數調用都會創建新的間隔。你應該將區間之外的功能:

var animateTitle = function(countMessages) { 
    if (isChatTab) { 
    if (animStep) { 
     document.title = "New messages ("+countMessages+") - "+origTitle; 
    } else { 
     document.title = origTitle; 
    } 
    animStep = !animStep; 
    } else { 
     document.title = origTitle; 
     animStep = false; 
    } 
}; 
time_title = setInterval(function(){ animateTitle(countMessages) }, 3000); 
+0

沒有,我需要調用函數每3秒 – AhmedFaud 2014-11-08 13:45:38

+0

@AhmedFaud ['的setInterval()'](https://developer.mozilla.org/en-US/docs /Web/API/WindowTimers.setInterval)會每3秒調用一次函數,我想你會把它和['setTimeout()']混淆(https://developer.mozilla.org/en-US/docs/Web /API/WindowTimers.setTimeout),它將只執行一次。 – 2014-11-08 14:09:08