关于settimeout 奇怪的输出

  setTimeout(() => {
    console.log('a')
  }, 1)

  setTimeout(() => {
    console.log('b')
  }, 0)

  setTimeout(() => {
    console.log('c')
  }, 10)
  setTimeout(() => {
    console.log('d')
  }, 4)

for(let i = 0;i<1000;i++){
  console.log(100);
}
结果是a、d、c、b

测试环境:chrome控制台

阅读 1.5k
2 个回答

为了解答这个问题:我测试了 Chrome/Edge/Safari/Firefox。(都是最新浏览器)

Chrome: a b d c
Edge:a d c b ( 如果去掉后面的循环,顺序为:a b d c)
Safari: a b d c
Firefox: b a d c

浏览器内部也是不断再调整,所以不要太纠结这种问题,但是关于 setTimeout 还是有些知识点要关注下,

比如:4ms 是怎么回事?

https://html.spec.whatwg.org/...

https://developer.mozilla.org...

以及与 promise 相关的任务队列执行顺序问题。

望有些帮助。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题