首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么setTimeout(fn,0)和setTimeout(fn,1)相同,而sT(fn,5) / sT(fn,6)不同?

为什么setTimeout(fn,0)和setTimeout(fn,1)相同,而sT(fn,5) / sT(fn,6)不同?
EN

Stack Overflow用户
提问于 2020-08-22 22:14:58
回答 1查看 55关注 0票数 1

已经有一段时间了,因为这样的话题从2011年到2012年就没提过了。现在,这段代码

代码语言:javascript
运行
复制
  setTimeout(()=>{ console.log(1); }, 1);
  setTimeout(()=>{ console.log(2); }, 0);
  setTimeout(()=>{ console.log(3); }, 2);

将打印 1 -2-3,即使您希望2的记录速度比1快。

您可以通过指出“所有小于4ms的超时将延迟到4ms”来解释这一点。

或者说大约13毫秒的滴答,比如-在执行第二行时,第一行已清除时间并记录在案,但不,如果我们使用2-3毫秒的时间,这两条规则都不适用。在这种情况下,一切都如期而至。

证明:

代码语言:javascript
运行
复制
  setTimeout(()=>{ console.log(1); }, 3);
  setTimeout(()=>{ console.log(2); }, 2);
  setTimeout(()=>{ console.log(3); }, 2);

不会应用该规则-2在1之前被记录,就像ms order所规定的那样。

这种行为在Chrome 84中得到了满足。Firefox正在按顺序执行所有这些代码,不管那里有什么ms。1-2或3-2或6-5等结果表明,1ms和0ms的Chrome是相同的,而5-6或2-3是不同的PS: Opera的行为也像Chrome一样。处理1ms与0相同,而2ms与1ms不同

为什么?

EN

回答 1

Stack Overflow用户

发布于 2020-08-22 22:25:10

因为1ms在调用排队的代码块时已经传递了。看到第一个在队列的前面,超时时间已经过去,它将被执行。

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

https://stackoverflow.com/questions/63541609

复制
相关文章

相似问题

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