JavaScript - setTimeout の問題
某草草
某草草 2017-06-14 10:53:57
0
3
569
###機能テスト() {### リーリー
某草草
某草草

全員に返信(3)
仅有的幸福

まずは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
三叔

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

いいねを押す +0
漂亮男人

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート