シングルスレッド言語としての JavaScript: JavaScript が一度に 1 つのタスクのみを処理する方法を簡単に説明しますが、イベント ループによりそうではないように見えます
。 イベント ループの仕組み: イベント ループ プロセスの主要な手順
スタック: コール スタックは同期コードを管理します。
キュー: コールバック キューには、実行を待っているタスクが保持されます。
ループ: イベント ループは、
の前にスタックが空かどうかを確認します。
タスクをキューからスタックに移動します。
ワークフローの内訳:
最初のコード実行:
console.log('Hi'); $.get('url', function cb(data) { console.log(data); }); console.log('JSConfEU');
非同期関数呼び出し ($.get):
次に、$.get('url', function cb(data) { ... }) が見つかります。この関数は、「url」からデータを取得する HTTP リクエストを開始します。
メインスレッドをブロックする代わりに、リクエストは Web API 環境 (多くの場合ブラウザの一部) に送信されます。
コールバック関数 (cb) は、HTTP リクエストが完了すると実行されるように登録されていますが、すぐには実行されません。 HTTP リクエストは Web API セクションに読み込まれ続け、XHR (XMLHttpRequest) としてマークされます。これは、ネットワーク リクエストを処理する場合に一般的です。
次の同期行に移動:
イベントループとタスクキュー:
すべての同期コードが完了すると、呼び出しスタックは空になり、JavaScript は非同期タスクが完了するまで待機します。
HTTP リクエストが完了すると、コールバック関数 (cb) が Web API からタスク キューに移動されます。
イベント ループは呼び出しスタックが空かどうかを継続的にチェックし、空の場合、イベント ループはタスクをタスク キューから呼び出しスタックに移動します
コールバック実行:
概要:
このフローは、イベント ループが非同期コードを処理する方法を示します
投稿者:
呼び出しスタックで同期コードを直ちに処理します。
Web API で非同期タスクを処理し、完了したらタスク キューに移動します。
イベント ループが空の場合にのみタスクを呼び出しスタックに移動できるようにし、ブロックしないコード実行を保証します。
以上がJavaScript がスリープしない理由: イベント ループの簡単なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。