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

+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), который будет выполняться только один раз. –

Смежные вопросы