我不明白为什么第二个函数调用(在函数体之后)优先于正文内部的函数?
function a(){
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
setTimeout(a,2000)
答案 0 :(得分:5)
按时间顺序:
您定义的功能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列表,内部时钟分辨率是什么等)。
[*]您可以使用setInterval()
一次来实现类似的行为。
答案 1 :(得分:1)
未定义函数a
。实际运行的代码片段是a
的定义,然后调用setTimeout(a,2000)
。
答案 2 :(得分:0)
我认为
function a () {
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
是一个函数体,在此之后我们正在调用。我不认为这是一个等级问题。