Проще всего просто вызвать функцию непосредственно в первый раз:
foo();
setInterval(foo, delay);
Однако есть веские причины избегать setInterval
- в частности, в некоторых случаях целая нагрузка setInterval
событий можетприбыть сразу после друг друга без каких-либо задержек.Другая причина в том, что если вы хотите остановить цикл, вы должны явно вызвать clearInterval
, что означает, что вы должны помнить дескриптор, возвращенный из исходного вызова setInterval
.
Таким образом, альтернативный метод должен иметь foo
инициирует себя для последующих вызовов, используя вместо этого setTimeout
:
function foo() {
// do stuff
// ...
// and schedule a repeat
setTimeout(foo, delay);
}
// start the cycle
foo();
Это гарантирует, что по крайней мере интервал между вызовами delay
.Это также упрощает отмену цикла, если это необходимо - вы просто не вызываете setTimeout
, когда достигается условие завершения цикла.
Еще лучше, вы можете сразу же обернуть все это в Вызывается выражение функции , которое создает функцию, которая затем снова вызывает себя, как описано выше, и автоматически запускает цикл:
(function foo() {
...
setTimeout(foo, delay);
})();
, который определяет функцию и запускает цикл все за один раз.