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

标签 javascript settimeout

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

  var TIMEOUT  = 700;

  console.log("TIMEOUT", TIMEOUT);

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

这会导致网站上的超时时间: 从 1200 到 4000。

最佳答案

setTimeout() 并不意味着在恰好 N 毫秒后执行代码。它的意思是,至少在 N 毫秒内不执行代码。

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

这里有一个小演示,使用同步 while 循环来展示这一点:

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

您会听到人们将类似于演示中的代码称为“阻塞”。这是因为它阻塞了事件循环队列。

如果您想要throrough overview,我还写了一篇关于该主题的较长文章。 .

关于javascript - javascript setTimeout 执行时间需要多倍的时间可能是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46747971/

相关文章:

javascript - 在复杂度为 O(n) 的 Javascript 对象中查找 3 个最大值的键?

php - 禁用 JavaScript 会影响 PHP session 吗?

Javascript 标签导航问题

javascript - Jquery 选择一个对象但隐藏同一类型的其他对象

javascript - $(this) 在 animate() 回调中但带有 setTimeout

jquery - 使用 setTimeout 定期进行自动完成 AJAX 调用?

jquery - jQuery .removeClass() 没有做任何事情的奇怪问题

javascript - 如何从表单变量对象的属性中获取特定内容

javascript - 循环中的setTimeout : callbacks happen with no delay between them

JavaScript 函数和 UI 更新