2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

イベントループとは?

Last updated at Posted at 2025-05-19

イベントループとは?

イベントループは、JavaScriptランタイム(ブラウザやNode.jsなど)で非同期処理を管理するための中心的な仕組みです。

JavaScriptはシングルスレッドの言語であり、一度に一つの作業しか実行できません。しかし、UIの応答性やAPI通信などの非同期処理をスムーズに行うために、イベントループの仕組みが導入されています。

コールスタックとイベントループ

1. コールスタック (Call Stack)

  • JavaScriptでは、現在実行中の関数がスタック(LIFO構造) で管理されます。
  • 関数が呼び出されるとスタックに積まれ、処理が終わると取り出されます。
function foo() {
  console.log("Hello");
}
foo();
  1. foo() がスタックに積まれる
  2. console.log("Hello") が実行される
  3. foo() がスタックから取り除かれる

2. Web API(ブラウザ API)

  • setTimeoutaddEventListener, fetch などは JavaScriptのコア機能ではなく、ブラウザが提供する機能です。
  • 例えば setTimeout を呼び出すと、その処理はWeb API領域に渡されて実行されます。
console.log("Start");

setTimeout(() => {
  console.log("Callback");
}, 1000);

console.log("End");

出力結果:

Start  
End  
Callback

なぜ Callback は最後に出力されるのでしょうか?

イベントループの動作

  1. すべての同期コードはまずコールスタック上で実行されます。
  2. setTimeout のような非同期関数はWeb APIに渡されます。
  3. タイマーが終了すると、コールバック関数は**コールバックキュー(タスクキュー)**に移されます。
  4. イベントループはコールスタックが空かどうかを確認し、空であればキューからコールバックを取り出して実行します。

コード例の再確認

console.log("1");

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

console.log("3");

出力結果:

1  
3  
2
  • setTimeout(..., 0)すぐに実行されるわけではありません
  • まず Web API に送られ、タイマー終了後にコールバックキューに入ります。
  • コールスタックが空になってからイベントループによって実行されます。

重要なポイントまとめ

  • JavaScriptはシングルスレッドで動作する。
  • イベントループはコールスタックが空になったタイミングでのみ、コールバックキューから処理を取り出す。
  • setTimeout(..., 0)0ミリ秒後に実行と指定されても、コールスタックが空くまで実行されない。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?