2014-11-08 66 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