javascript中函数执行的优先级
我不明白为什么第二个函数调用(在函数体之后)的优先级高于函数体内部的调用javascript中函数执行的优先级,javascript,function,settimeout,order-of-execution,Javascript,Function,Settimeout,Order Of Execution,我不明白为什么第二个函数调用(在函数体之后)的优先级高于函数体内部的调用 function a(){ var num = 5; console.log( ++num ); setTimeout( a, 100 ); }; setTimeout(a,2000) 函数a没有调用,只是定义了。实际运行的代码段是a的定义,然后调用setTimeout(a,2000)。按时间顺序: 您正在定义函数a,而没有调用它 您正在计划在两秒钟后调用a:setTimeout(a,2000) 它被称为
function a(){
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
setTimeout(a,2000)
函数
a
没有调用,只是定义了。实际运行的代码段是a
的定义,然后调用setTimeout(a,2000)
。按时间顺序:
- 您正在定义函数
,而没有调用它a
- 您正在计划在两秒钟后调用
:a
setTimeout(a,2000)
- 它被称为
- 当它被调用时,它会将自己安排在100毫秒后调用
a
,暂停100毫秒[*]
但是,根据您的上下文判断,您会问在以下情况下优先考虑什么:
setTimeout(a, 2000);
setTimeout(b, 100);
嗯,最有可能的是将首先调用b
(假设第一行和第二行之间没有不可预测的暂停,例如,由于总体操作系统性能问题)
如果使用相同的超时:
setTimeout(a, 100);
setTimeout(b, 100);
a
很可能首先被调用。然而,我认为这并不能保证,这取决于JS引擎(它是否对即将到来的事件使用严格的FIFO列表,内部时钟分辨率是多少,等等)
[*]我认为,只要使用一次setInterval()
,就可以实现类似的行为
function a () {
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
是一个函数体,在此之后我们调用。我不认为这是一个层次结构问题。您期望什么行为?您是否应该编写“函数a(){…}();”(注意最后的括号)?您的代码没有在最后一行之前调用函数。我只是想知道为什么一个调用等待另一个调用?然后我就可以预测行为了。
num
似乎永远不会改变,这让你感到困惑吗?如果是这样的话,那是因为每次调用a
时都要重新初始化一个新变量。我本来打算+1,但请省略setInterval
部分。。。它在这里没什么可做的,而且可能会让旋转木马感到困惑。@MaxArt:移到一个较小的音符。我认为这并不令人困惑,但我同意这与剧本关系不大