我不明白为什么第二个函数调用(在函数体之后)优先于函数体内部的调用?
function a(){
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
setTimeout(a,2000)
我不明白为什么第二个函数调用(在函数体之后)优先于函数体内部的调用?
function a(){
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
setTimeout(a,2000)
按年代顺序:
您正在定义函数a
而不调用它
您计划a
在两秒钟后被调用:setTimeout(a,2000)
它被称为
当它被调用时,它会安排自己在 100 毫秒后调用
您的代码基本上会休眠 2 秒,然后a
以 100 毫秒的暂停[*]执行。
但是,根据您的上下文判断,您在问以下情况下的优先级是什么:
setTimeout(a, 2000);
setTimeout(b, 100);
好吧,很可能b
会首先被调用(假设第一行和第二行之间没有不可预测的暂停,例如由于整体操作系统性能问题)。
如果您使用相同的超时:
setTimeout(a, 100);
setTimeout(b, 100);
a
很可能会首先被调用。但是我不认为这是有保证的,并且取决于 JS 引擎(它是否对即将发生的事件使用严格的 FIFO 列表,内部时钟分辨率是多少等)
[*] 你可以通过使用once来实现类似的行为。setInterval()
该函数a
没有被调用,只是被定义。实际运行的代码是 的定义a
,然后setTimeout(a,2000)
被调用。
我认为
function a () {
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
是一个函数体,在此之后我们调用。我不认为这是一个等级问题。