我在JavaScript中运行此代码:
setTimeout(function(){console.log("1");}, 0);
console.log("2");
但输出是:
2
1
为什么不相反呢?
答案 0 :(得分:4)
setTimeout()
将所有代码放入队列中,然后根据时间执行。因此,您可以看到要作为一行队列执行的过程列表。对于上面的代码,您有:
setTimeout
console.log(2)
console.log(1)
因此,首先执行的是初始化计时器。其次,console.log
会被执行,您会看到2
。这里要注意的一件有趣的事情是,setTimeout
waits at least for 4 ms
在执行其回调函数之前。
答案 1 :(得分:1)
当您使用setTimeout()
或其中一个朋友时,其功能将被放置在队列中,以便在所有当前代码完成后执行。
应该注意documentation表示最短时间被限制为4
。
答案 2 :(得分:1)
只是因为setTimeout方法的回调函数稍后执行。
的setTimeout(..)
尽管你指定0,回调函数不会立即执行。请参阅https://stackoverflow.com/a/779785/2391070
console.log(" 2")// 2
setTimeout调用callback和console.log(" 1")// 1