2番目の関数呼び出し(関数本体の後)が本体内のものよりも優先される理由がわかりませんか?
function a(){
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
setTimeout(a,2000)
2番目の関数呼び出し(関数本体の後)が本体内のものよりも優先される理由がわかりませんか?
function a(){
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
setTimeout(a,2000)
年代順に:
あなたはそれを呼び出さa
ずに関数を定義しています
a
2秒後に呼び出されるようにスケジュールしています。setTimeout(a,2000)
という
呼び出されると、100ミリ秒後に呼び出しをスケジュールします
コードは基本的に2秒間スリープしてからa
、100ミリ秒の休止[*]で実行されます。
しかし、あなたの文脈から判断すると、あなたは次の状況で何が優先されるかを尋ねています:
setTimeout(a, 2000);
setTimeout(b, 100);
まあ、おそらくb
最初に呼び出されます(たとえば、OS全体のパフォーマンスの問題のために、1行目と2行目の間に予測できない一時停止がないと仮定します)。
同じタイムアウトを使用する場合:
setTimeout(a, 100);
setTimeout(b, 100);
a
ほとんどの場合、最初に呼び出されます。ただし、これは保証されているとは思わず、JSエンジンに依存します(今後のイベントに厳密なFIFOリストを使用するかどうか、内部クロックの解像度など)。
[*] 1回使用することで同様の動作を実現できます。setInterval()
関数a
は呼び出されず、定義されただけです。実際に実行されるコードの一部はの定義でありa
、その後setTimeout(a,2000)
呼び出されます。
おもう
function a () {
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
は関数本体であり、この後、呼び出します。階層性問題ではないと思います。