ホームページ ウェブフロントエンド jsチュートリアル JavaScript のイベント ループを理解する — 簡単になりました!

JavaScript のイベント ループを理解する — 簡単になりました!

Oct 17, 2024 am 06:23 AM

JavaScript は最も人気のあるプログラミング言語の 1 つであり、ウェブ上の Web サイトの約 90% で使用されています。しかし、最も扱いにくく、最も誤解されている概念の 1 つは、イベント ループ がどのように機能するかです。イベントループ、タスクキュー、コールスタック、マイクロタスクキュー、Web APIについて簡単に説明します。

JavaScript の何が特別なのでしょうか?

JavaScript はシングルスレッド言語です。これは、複数の処理を同時に処理できる C や Go のような言語とは異なり、一度に 1 つの処理を実行することを意味します。データのフェッチやタイマーの実行などの非同期タスクをスムーズに動作させるために、JavaScript は イベント ループ と呼ばれるものを使用します!

1. Web API とは何ですか?

Web API は、ネットワーク リクエストの作成 (フェッチを使用)、タイマーの設定 (setTimeout)、またはユーザーの位置情報へのアクセス ( を使用) などのタスクを処理するためにブラウザーまたは Node.js によって提供される追加のツールです。地理位置情報 API)。これらのタスクは、メインの JavaScript スレッドの外で実行されます。

例:

setTimeout(() => {
  console.log("Timer done!");
}, 2000);
ログイン後にコピー

ここでは、メイン JavaScript が他のコードの実行を継続している間、ブラウザーがタイマーを処理します。

2. タスクキューとは何ですか?

タスク キュー は、Web API からのコールバック関数、イベント リスナー、およびその他の遅延アクションが、JavaScript が実行する準備ができるまで待機する場所です。これらのタスクは列に並んで順番を待ちます。

これは店舗の待機列のようなものだと考えてください。JavaScript が現在のタスクで完了すると、各タスクがイベント ループによって処理されます。

3. コールスタックとは何ですか?

呼び出しスタック は、JavaScript が関数呼び出しを追跡する場所です。関数を呼び出すと、その関数はスタックにプッシュされます。それが終わると、外されます。 JavaScript はスタックに出現する順序でタスクを処理し、本質的に同期的です。

4. イベントループとは何ですか?

イベント ループは、すべてを動かし続ける交通警察官のようなものです。 コールスタックが空かどうかを常にチェックし、空であれば、タスクをタスクキューまたはマイクロタスクキューからスタックに移動して実行します。これにより、JavaScript はメインスレッドをブロックすることなく

非同期コードを処理できるようになります。

イベントループの動作例
setTimeout(() => {
  console.log("2000ms");
}, 2000);

setTimeout(() => {
  console.log("100ms");
}, 100);

console.log("End");
ログイン後にコピー

ここで何が起こるのですか?

細かく見てみましょう:
  1. 「終了」は同期であり、コールスタックで実行されるため、すぐにログに記録されます。
  2. 100ms の setTimeout は Web API によって処理されます。 100 ミリ秒後、コールバックは タスク キュー
  3. に移動します。
  4. 2000 ミリ秒の setTimeout も同じことを行いますが、そのコールバックは 2000 ミリ秒後に タスク キュー
  5. に移動します。
  6. イベント ループは、最初に 100 ミリ秒のコールバックを コール スタック
  7. に移動し、次に 2000 ミリ秒のコールバックを移動します。

5. マイクロタスクキューとは何ですか?

マイクロタスク キューは、タスク キューのに処理されるタスク用の特別なキューです。マイクロタスクは、約束 や突然変異オブザーバーなどから派生します。イベント ループは常に、タスク キューの前に マイクロタスク キュー

をチェックします。

Promise を使用したマイクロタスクの例
console.log("Start");

setTimeout(() => {
  console.log("Timeout");
}, 0);

Promise.resolve().then(() => {
  console.log("Promise");
});

console.log("End");
ログイン後にコピー

ここで何が起こるのですか?

  1. 「開始」はすぐに記録されます。
  2. setTimeout コールバックは タスク キュー
  3. に配置されます。
  4. Promise の解決策は マイクロタスク キュー
  5. に配置されます。
  6. 「終了」が記録されます。
  7. イベント ループは マイクロタスク キュー
  8. をチェックし、Promise コールバックを実行します。
  9. 最後に、タスク キューは setTimeout コールバックを処理します。

出力:

Start
End
Promise
Timeout
ログイン後にコピー

視覚的表現

Understanding the Event Loop in JavaScript — Made Simple!

すべてをまとめる

すべてがどのように組み合わされるかは次のとおりです:
  1. Web API
  2. は、メインスレッド外のタイマーなどの非同期タスクを処理します。
  3. イベント ループは、タスクをタスク キューまたはマイクロタスク キューからコール スタック
  4. に移動します。
  5. マイクロタスク (Promise など) は、タスクキュー
  6. 内のタスクの前に最初に処理されます。

以上がJavaScript のイベント ループを理解する — 簡単になりました!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScriptの文字列文字を交換します JavaScriptの文字列文字を交換します Mar 11, 2025 am 12:07 AM

JavaScriptの文字列文字を交換します

jQuery日付が有効かどうかを確認します jQuery日付が有効かどうかを確認します Mar 01, 2025 am 08:51 AM

jQuery日付が有効かどうかを確認します

jQueryは要素のパディング/マージンを取得します jQueryは要素のパディング/マージンを取得します Mar 01, 2025 am 08:53 AM

jQueryは要素のパディング/マージンを取得します

10 jQuery Accordionsタブ 10 jQuery Accordionsタブ Mar 01, 2025 am 01:34 AM

10 jQuery Accordionsタブ

10 jqueryプラグインをチェックする価値があります 10 jqueryプラグインをチェックする価値があります Mar 01, 2025 am 01:29 AM

10 jqueryプラグインをチェックする価値があります

ノードとHTTPコンソールを使用したHTTPデバッグ ノードとHTTPコンソールを使用したHTTPデバッグ Mar 01, 2025 am 01:37 AM

ノードとHTTPコンソールを使用したHTTPデバッグ

カスタムGoogle検索APIセットアップチュートリアル カスタムGoogle検索APIセットアップチュートリアル Mar 04, 2025 am 01:06 AM

カスタムGoogle検索APIセットアップチュートリアル

jQueryはscrollbarをdivに追加します jQueryはscrollbarをdivに追加します Mar 01, 2025 am 01:30 AM

jQueryはscrollbarをdivに追加します

See all articles