我不明白爲什麼第二個函數調用(在函數體之後)優先於正文內部的一個函數?JavaScript中函數執行的優先級
function a(){
var num = 5;
console.log(++num);
setTimeout(a, 100);
};
setTimeout(a,2000)
我不明白爲什麼第二個函數調用(在函數體之後)優先於正文內部的一個函數?JavaScript中函數執行的優先級
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
稱爲第一(假設第一線和第二線之間不存在不可預知的停頓,例如由於整體OS性能問題)。
如果使用相同的超時:
setTimeout(a, 100);
setTimeout(b, 100);
a
將最有可能首先被調用。但是我不認爲這是有保證的,取決於JS引擎(是否使用了即將發生的事件嚴格的FIFO列表,什麼是內部時鐘分辨率等)
[*]您可以實現相似行爲通過使用setInterval()
一旦。
我打算+1,但是請省略'setInterval'部分......它在這裏做的事情很少,可能會讓您感到困惑。 – MaxArt
@MaxArt:移至較小的筆記。我不認爲這是令人困惑的,但同意與腳本不相關 –
功能a
不被調用,剛定義。實際運行的那段代碼是a
的定義,然後調用setTimeout(a,2000)
。
我覺得
function a() {
var num = 5;
console.log(++num);
setTimeout(a, 100);
};
是一個函數體並在此之後,我們在呼喚。我不認爲這是一個層次問題。
你期望什麼行爲? – Sirko
你應該寫「function a(){...}();」 (注意最後的括號)?您的代碼在最後一行之前不會調用該函數。 – tsiki
我只想知道爲什麼一個電話正在等待另一個電話?然後,我將能夠預測行爲。 – carousel