首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript setTimeout的执行时间可能是多倍的原因是什么?

javascript setTimeout的执行时间可能是多倍的原因是什么?
EN

Stack Overflow用户
提问于 2017-10-14 18:28:17
回答 1查看 542关注 0票数 0

setTimeout等待2-4倍于被配置为执行的时间的原因是什么?

代码语言:javascript
运行
复制
  var TIMEOUT  = 700;

  console.log("TIMEOUT", TIMEOUT);

  var preTimeout = new Date();
  setTimeout(function() {
    console.log("timeout took:", new Date() - preTimeout);
  }, TIMEOUT);

这将导致1200-4000的timeout took:出现在网站上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-14 18:36:34

setTimeout()并不意味着在精确的N毫秒之后执行代码。这意味着,至少不能执行N毫秒的代码。

异步代码(如setTimeout()回调)被放置在事件循环队列中,直到所有同步代码完成执行,然后运行。这包括在超时之前在队列中运行的任何异步代码。只有在完成所有这些操作之后,您的回调才能运行。

下面是一个使用同步while循环展示这一点的小演示:

https://jsfiddle.net/foxbunny/1a9rckdq/

就像演示中的代码一样,您会听到有人提到“阻塞”。这是因为它阻塞了事件循环队列。

如果您想要一个粗浅概述,我还写了一篇关于这个主题的长篇文章。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46747971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档