在此代码中:
setTimeout(() => console.log('C'), 100);
setTimeout(() => console.log('D'), 0);
someSynchronousTask() // Assume this takes ~500ms
这会记录
D -> C
,但为什么呢?
为什么不记录
C -> D
?由于 C
的 setTimeout 首先被推送到事件循环队列,并且已经过去了 500 毫秒,即 > 100 毫秒。因此,现在两个 setTimeouts 都已准备好执行。那么,它应该执行“C”,因为它之前被推入队列了?
我的英语不好。
看起来你先执行 setTimeout 函数,然后运行需要 500ms 的函数。
但是请注意
JavaScript
是从上到下运行的。
根据我的理解和查阅MDN网络文档,找到了解决方案:
https://developer.mozilla.org/en-US/docs/Web/API/setTimeout 说“setTimeout() 是一个异步函数”
因此
setTimeout
和您的任务是异步运行的。
谢谢。