18

setInterval 如何处理比所需时间间隔更长的回调函数?

我读过回调可能会收到延迟的毫秒数作为它的第一个参数,但我无法找到它为什么会迟到(抖动或长时间运行的函数)。

以及精彩的跟进,它对于常见浏览器的行为是否有所不同?

4

1 回答 1

22

让我引用John Resig 的一篇关于计时器的优秀文章:

setTimeout(function(){
  /* Some long block of code... */
  setTimeout(arguments.callee, 10);
}, 10);

setInterval(function(){
  /* Some long block of code... */
}, 10);

乍一看,这两段代码在功能上似乎是等效的,但实际上并非如此。值得注意的是,setTimeout 代码在上一次回调执行之后总是会有至少 10 毫秒的延迟(它可能最终会更多,但绝不会更少),而 setInterval 将尝试每 10 毫秒执行一次回调,而不管最后一次回调何时执行。

如果间隔需要足够长的时间来执行(比指定的延迟时间长),则间隔可以无延迟地连续执行。

于 2009-12-29T19:44:34.287 回答