検索

ホームページ  >  に質問  >  本文

JavaScript - setTimeout の問題

###機能テスト() {### リーリー
某草草某草草2810日前573

全員に返信(3)返信します

  • 仅有的幸福

    仅有的幸福2017-06-14 10:55:57

    まずはJavaScriptに関する記事を読むことをお勧めします
    JavaScriptイベントループの動作メカニズムについて詳しく説明します

    この記事ではJavaScriptのイベントポーリングの原理について詳しく説明しています

    トピックの質問について話しましょう:

    1. test()が実行されると、setTimeoutが2つ同時に実行され、その後alert(0)が実行されるため、最初に0が出力されます。 setTimeout はまだ実行されていないため、a の値は 19 です。a には他に割り当てる機会がありません。

    2. メインスレッドが実行された後、スケジュールされたタスクを実行するためにタスクキューをポーリングします。最初の setTimeout 時間は 2 番目の setTimeout 時間よりも短いため、この時点で、alert(a) が最初に実行されます。 19 の 1 ステップ後に出力され、その後、値 5 が割り当てられます。

    3. 次に、2 番目の setTimeout を実行します。両方の setTimeout が同時にキューに入れられるため、2 番目の setTimeout のコールバックは、前の手順で取得した 5 が出力されます。この場合、割り当てられる値は 4 になります。 2秒くらいかかるのはJavaScriptのタイマーが正確ではないからです

    返事
    0
  • 三叔

    三叔2017-06-14 10:55:57

    独自のデバッグは、メカニズムをより徹底的に理解するのに役立ちます

    返事
    0
  • 漂亮男人

    漂亮男人2017-06-14 10:55:57

    最初のタイマーが実行された後、グローバル a は 5 になりました
    テスト関数での a の変更: 1-19-5-最後のアラート(a)-4

    返事
    0
  • キャンセル返事