まずはJavaScriptに関する記事を読むことをお勧めします JavaScriptイベントループの動作メカニズムについて詳しく説明します
この記事ではJavaScriptのイベントポーリングの原理について詳しく説明しています
トピックの質問について話しましょう:
1. test()が実行されると、setTimeoutが2つ同時に実行され、その後alert(0)が実行されるため、最初に0が出力されます。 setTimeout はまだ実行されていないため、a の値は 19 です。a には他に割り当てる機会がありません。
2. メインスレッドが実行された後、スケジュールされたタスクを実行するためにタスクキューをポーリングします。最初の setTimeout 時間は 2 番目の setTimeout 時間よりも短いため、この時点で、alert(a) が最初に実行されます。 19 の 1 ステップ後に出力され、その後、値 5 が割り当てられます。
独自のデバッグは、メカニズムをより徹底的に理解するのに役立ちます
最初のタイマーが実行された後、グローバル a は 5 になりましたテスト関数での a の変更: 1-19-5-最後のアラート(a)-4
まずは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のタイマーが正確ではないからです独自のデバッグは、メカニズムをより徹底的に理解するのに役立ちます
最初のタイマーが実行された後、グローバル a は 5 になりました
テスト関数での a の変更: 1-19-5-最後のアラート(a)-4