为什么setTimeout(function,0)在下一次操作后执行,但不是在调用时?

时间:2016-01-20 10:14:15

标签: javascript

我在JavaScript中运行此代码:

setTimeout(function(){console.log("1");}, 0);
console.log("2");

但输出是:

2
1

为什么不相反呢?

3 个答案:

答案 0 :(得分:4)

setTimeout()将所有代码放入队列中,然后根据时间执行。因此,您可以看到要作为一行队列执行的过程列表。对于上面的代码,您有:

  1. setTimeout
  2. console.log(2)
  3. 回调函数,(如果有)
    1. console.log(1)
  4. 因此,首先执行的是初始化计时器。其次,console.log会被执行,您会看到2。这里要注意的一件有趣的事情是,setTimeout waits at least for 4 ms在执行其回调函数之前。

答案 1 :(得分:1)

当您使用setTimeout()或其中一个朋友时,其功能将被放置在队列中,以便在所有当前代码完成后执行。

应该注意documentation表示最短时间被限制为4

答案 2 :(得分:1)

只是因为setTimeout方法的回调函数稍后执行。

  1. 的setTimeout(..)

    尽管你指定0,回调函数不会立即执行。请参阅https://stackoverflow.com/a/779785/2391070

  2. console.log(" 2")// 2

  3. setTimeout调用callback和console.log(" 1")// 1