javascript中函数执行的优先级

car*_*sel -2 javascript function settimeout order-of-execution

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

function a(){
  var num = 5;
  console.log( ++num );
  setTimeout( a, 100 );
};
setTimeout(a,2000)
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 5

按年代顺序:

  • 你在a 没有调用它的情况下定义函数

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

  • 它被称为

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

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

但是根据您的上下文判断,您在询问以下情况的优先级:

setTimeout(a, 2000);
setTimeout(b, 100);
Run Code Online (Sandbox Code Playgroud)

好吧,最有可能b首先被调用(假设第一行和第二行之间没有不可预测的暂停,例如由于整体OS性能问题).

如果您使用相同的超时:

setTimeout(a, 100);
setTimeout(b, 100);
Run Code Online (Sandbox Code Playgroud)

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

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