setTimeout(function(){console.log(3)},0); 它的值为0

6 javascript function

当我在控制台中执行以下代码时, 1,4, undefined 3,2.

我想知道为什么它不执行1,3,42 因为在setTimeout(function(){console.log(3)}, 0);毫秒内参数是0

    (function() {
        console.log(1); 
        setTimeout(function(){console.log(2)}, 1000); 
        setTimeout(function(){console.log(3)}, 0); 
        console.log(4);
    })();
Run Code Online (Sandbox Code Playgroud)

nri*_*ril 5

这是John Resig的一个很好的解释:http : //ejohn.org/blog/how-javascript-timers-work/
但最重要的是console.log(1)和(4)是“内联”执行的,而2和3放置在事件队列中,直到所有内联代码都执行完之后才执行。因此,即使(3)的延迟为0,在执行所有语句后仍然会发生延迟。
测试您的代码时,我也没有收到未定义的消息。


Thi*_*ter 4

undefined正如评论中提到的,这是函数的返回值。

4出现在前面的原因3很简单,JavaScript 中没有并行性,因此计时器回调在函数返回之前无法执行。