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

时间:2015-01-23 17:55:53

标签: 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);
    })();

3 个答案:

答案 0 :(得分:5)

这是John Resig的一个很好的解释:http://ejohn.org/blog/how-javascript-timers-work/
但是底线是console.log(1)和(4)'在线'执行,2和3放在事件队列中,并且在执行所有内联代码之前不执行。因此,即使(3)的延迟为0,它仍然会在所有语句执行后发生 当我测试你的代码时,我没有得到未定义的消息。

答案 1 :(得分:4)

如评论中所述,undefined是函数的返回值。

4之前出现3的原因只是在JavaScript中没有并行性,因此在函数返回之前,定时器回调无法执行。

答案 2 :(得分:3)

简答:undefined来自你的javascript控制台中执行语句的结果,函数什么都没有返回,所以未定义

试着分解一下:

  1. console.log(1); // 1
  2. console.log(4); // 4
  3. 您执行的代码返回undefined
  4. setTimeout(function(){console.log(3)}, 0); // 3执行下一个堆栈
  5. setTimeout(function(){console.log(2)}, 1000); // 2
  6. 之后1秒

    编辑: 测试这个

    var a = (function(){})(); // print undefined, a is also undefined, no returned value