作者:mobiledu2502881483 | 来源:互联网 | 2023-01-13 09:32
什么原因可能是setTimeout
等待2-4次被配置执行的原因?
var TIMEOUT = 700;
console.log("TIMEOUT", TIMEOUT);
var preTimeout = new Date();
setTimeout(function() {
console.log("timeout took:", new Date() - preTimeout);
}, TIMEOUT);
这导致timeout took:
网站上的1200-4000.
1> 小智..:
setTimeout()
并不意味着以后执行的代码恰好 n毫秒.它意味着,不要执行代码至少 N毫秒.
异步代码(如setTimeout()
回调)放在事件循环队列中,直到所有同步代码完成执行,然后运行.这包括在超时期限之前在队列中运行的任何异步代码.您的回调只能在完成所有这些后才能运行.
这是一个使用同步while
循环显示的小演示:
https://jsfiddle.net/foxbunny/1a9rckdq/
像演示中的代码就是你会听到人们称之为"阻塞"的代码.这是因为它阻止了事件循环队列.
如果你想要一个概括的话,我还写了一篇关于这个主题的文章.