javascript中函数执行的优先级

时间:2012-06-07 12:49:17

标签: javascript function settimeout order-of-execution

我不明白为什么第二个函数调用(在函数体之后)优先于正文内部的函数?

function a(){
  var num = 5;
  console.log( ++num );
  setTimeout( a, 100 );
};
setTimeout(a,2000)

3 个答案:

答案 0 :(得分:5)

按时间顺序:

  • 您定义的功能a 没有调用它

  • 您计划在两秒钟后调用asetTimeout(a,2000)

  • 它被称为

  • 调用它时,会在100毫秒后调度自己进行调用

您的代码基本上会休眠2秒,然后执行a并暂停100毫秒 [*]

然而,根据您的背景判断,您在询问以下情况的优先级是什么:

setTimeout(a, 2000);
setTimeout(b, 100);

嗯,最有可能首先调用b(假设第一行和第二行之间没有不可预测的暂停,例如由于整体操作系统性能问题)。

如果您使用相同的超时:

setTimeout(a, 100);
setTimeout(b, 100);

a很可能首先被召唤。但是我不认为这是有保证的,取决于JS引擎(它是否为即将发生的事件使用严格的FIFO列表,内部时钟分辨率是什么等)。

[*]您可以使用setInterval() 一次来实现类似的行为。

答案 1 :(得分:1)

未定义函数a。实际运行的代码片段是a的定义,然后调用setTimeout(a,2000)

答案 2 :(得分:0)

我认为

function a () {
    var num = 5;
    console.log( ++num );
    setTimeout( a, 100 ); 
};

是一个函数体,在此之后我们正在调用。我不认为这是一个等级问题。