この質問の答えのいくつかの用語について少し混乱しています: JavaScript でのイベントの優先順位は何ですか?
イベント ループとタスク キューに違いはありますか? また、これらのキューはどれくらいの大きさにできますか?
で間隔を設定し、setInterval()
これを中断するとalert()
、アラートが表示されている間、間隔がドロップされるためです。
この質問の答えのいくつかの用語について少し混乱しています: JavaScript でのイベントの優先順位は何ですか?
イベント ループとタスク キューに違いはありますか? また、これらのキューはどれくらいの大きさにできますか?
で間隔を設定し、setInterval()
これを中断するとalert()
、アラートが表示されている間、間隔がドロップされるためです。
ヒープ:すべての変数、オブジェクト、関数を格納し、このすべてにメモリが割り当てられます
Event Queue : 彼はリスト関数TOBE EXCECUTED By Stackを含む人物です。
スタック: 彼は、イベント キューによって保持されている関数を実行 する主要な人物です。
イベントループ:
彼はEvent Queue And Stackと連絡を取り合っている人 (マネージャー) です。
彼がすることは. Ifffスタックは空で、イベント キューには実行する関数が含まれています。次に、最初の関数をイベント キューからスタックにプッシュします
視覚的な例 1 :潜在的なフリップ
これは実装の詳細です。仕様では、イベントループは複数のタスク キューを使用してイベントを格納できるとされています。おそらく、キューのサイズに実質的な制限はありません。
たとえば、マウス/キーボード イベントは、おそらく UI の応答性を高めるために、他のタスクよりも優先度の高い特別な INPUT タスク キューに入る可能性があります。
alert
同期操作であるため、イベントの処理が中断されます。その間、該当するイベントはすべてキューに入れられます。
に保護メカニズムが表示されているだけだと思いますsetInterval()
。setInterval()
が目的のインターバル レートに追いつくことができない場合、インターバルをスキップします。それができなかった場合、余分なインターバルが永遠に蓄積される可能性があり、キューがどこかで飽和状態になるため良くありません。
キューイングの動作で私が見たすべてから、間隔とイベントは同じキューに入れられ、発生する予定の順序で処理されます。違いは、setInterval()
まだ処理されていないコールバックがキューに既にある場合、キューに別のコールバックを入れない (つまりスキップする) ことです。
Mousemove イベントも特別に処理されるため、それらでキューがいっぱいになることはありません。
あなたが投稿した質問は非常に人気のあるものですが、明確に説明することができませんでした.
まず最初に js は本質的に同期的です。ブラウザは、それを一種の非同期にするのに役立ちます。
js のコール スタックは同期的に動作しますが、非同期コード (setTimeout()、HTTP 要求) に遭遇するたびに、ブラウザの Web API に送信されます。
リクエストの応答を待ったり、タイムアウトが完了するのを待ったりするなど、処理が行われる場所。(非同期のコード部分は、当分コール スタックから削除され、コール スタックは次のタスクに移動します)
Web API が応答を受信した後、またはタイムアウト fn が終了すると、すべての非同期コードをキューに入れるタスク キューに送信されます。
イベントループが実際に機能する場所です。最初にコール スタックが空であるかどうかをチェックし、次にタスク キューの最初の要素がスタックにプッシュされます。
あなたの場合、あなたが警告したとき、コールスタックをブロックしたため、setIntervalをコールスタックにプッシュできませんでした