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)
按年代顺序:
你在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()