已经有一段时间了,因为这样的话题从2011年到2012年就没提过了。现在,这段代码
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毫秒的时间,这两条规则都不适用。在这种情况下,一切都如期而至。
证明:
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不同
为什么?
发布于 2020-08-22 22:25:10
因为1ms在调用排队的代码块时已经传递了。看到第一个在队列的前面,超时时间已经过去,它将被执行。
https://stackoverflow.com/questions/63541609
复制相似问题