setInterval和长时间运行的函数

All*_*nde 13 javascript setinterval

setInterval如何处理花费超过所需间隔的回调函数?

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

对于常见的浏览器,它的表现有多么不同?

CMS*_*CMS 17

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

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

setInterval(function(){
  /* Some long block of code... */
}, 10);
Run Code Online (Sandbox Code Playgroud)

这两段代码乍一看似乎在功能上等同,但它们不是.值得注意的是,setTimeout代码在前一次回调执行后总是至少延迟10ms(它可能最终会更多,但绝不会更少),而setInterval将尝试每10ms执行一次回调,而不管上次回调的执行时间.

如果间隔执行时间足够长(超过指定的延迟),则间隔可以无延迟地执行.

  • 因此,简而言之,因为JavaScript线程都是单线程的,所以回调不能并行运行.完善. (5认同)