-2

2番目の関数呼び出し(関数本体の後)が本体内のものよりも優先される理由がわかりませんか?

function a(){
  var num = 5;
  console.log( ++num );
  setTimeout( a, 100 );
};
setTimeout(a,2000)
4

3 に答える 3

6

年代順に:

  • あなたはそれを呼び出さa に関数を定義しています

  • a2秒後に呼び出されるようにスケジュールしています。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()

于 2012-06-07T12:56:45.987 に答える
1

関数aは呼び出されず、定義されただけです。実際に実行されるコードの一部はの定義でありa、その後setTimeout(a,2000)呼び出されます。

于 2012-06-07T12:55:15.730 に答える
0

おもう

function a () {
    var num = 5;
    console.log( ++num );
    setTimeout( a, 100 ); 
};

は関数本体であり、この後、呼び出します。階層性問題ではないと思います。

于 2012-08-03T09:42:56.717 に答える