新人エンジニア向け!JavaScriptの実行順序をわかりやすく解説

こんにちは。ゆうせいです

JavaScriptを書いていると、「なんでこの処理が先に動くの?」「思った順番で実行されない!」と混乱することはありませんか?

実は、JavaScriptの実行順序(実行フロー)にはしっかりとしたルールがあるんです。でも最初はちょっと分かりづらいですよね。

今回は、新人エンジニアの方に向けて、図や例を使いながら、JavaScriptの実行順序の基本をわかりやすく解説していきます!


h2: まず大前提:JavaScriptは「上から順に」動く

最初に覚えておきたいことは、とてもシンプル。

JavaScriptは基本的に、上から下に向かって順番に処理されるということです。

たとえば、以下のコードを見てください:

console.log("①");
console.log("②");
console.log("③");

このコードを実行すると、次のように表示されます:

①
②
③

当たり前のように見えるかもしれませんが、ここが出発点です。


h2: でも実は「例外」もある!それが非同期処理

JavaScriptの実行順序を複雑にしている原因は、非同期処理(ひどうきしょり)です。

h3: 非同期処理ってなに?

非同期処理とは、ある処理が終わるまで待たずに、先に別の処理を進める仕組みです。

例えば次のようなコード:

console.log("スタート");

setTimeout(() => {
  console.log("3秒後のメッセージ");
}, 3000);

console.log("エンド");

これを実行すると、こうなります:

スタート
エンド
3秒後のメッセージ

「えっ、setTimeout が真ん中にあるのに、なんで最後に出るの?」と驚いた方も多いのではないでしょうか。

ここで大事になるのが、「イベントループ」という仕組みです!


h2: 実行の流れを管理する「イベントループ」

JavaScriptの実行順序は、以下のような仕組みで制御されています:

  1. コールスタック(Call Stack)
  2. Web APIs(タイマーなどの処理)
  3. タスクキュー(Task Queue)
  4. イベントループ(Event Loop)

これらの関係を図で表すとこんな感じです:

+-------------------+
| コールスタック     |   ← 今すぐ実行する処理
+-------------------+
         ↓
+-------------------+
| Web API          |   ← setTimeoutなどの非同期処理を一時的に預ける場所
+-------------------+
         ↓(完了後)
+-------------------+
| タスクキュー       |   ← 完了した処理を並べておく列
+-------------------+
         ↑
     イベントループがチェックして
     空きがあれば実行へ

**ポイントは、「非同期の処理はすぐに実行されない」**ということです。


h2: よく出てくる非同期処理

以下は、JavaScriptでよく使われる非同期処理の例です:

非同期処理の種類具体例
タイマーsetTimeout, setInterval
ネットワークfetch, XMLHttpRequest
ユーザー操作addEventListener(クリックなど)
非同期APIPromise, async/await

h2: Promiseasync/await の実行順序

非同期処理の中でも、最近よく使われるのが Promiseasync/await です。

以下のコードを見てみましょう:

console.log("①");

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

console.log("③");

結果はこうなります:

①
③
②

「②」が最後なのは、then() の中身が マイクロタスク(microtask) としてキューに追加されるからです。


h2: async/await も実は Promise

async function run() {
  console.log("①");
  await Promise.resolve();
  console.log("②");
}

run();
console.log("③");

この結果は?

①
③
②

await のところで一旦中断し、③が先に出力されてから、②が出力されます。ここでもやはりPromiseの非同期処理として扱われているんですね!


h2: まとめ

処理の種類実行タイミング
通常のコードすぐに実行(コールスタック)
setTimeout最低指定時間後に実行(タスクキュー)
Promise.then直後のマイクロタスクとして実行
awaitthen と同様マイクロタスク

h2: 今後の学習のポイント

JavaScriptの実行順序は、最初は少し混乱します。でも、以下の点に注目していくと理解が深まりますよ!

  • setTimeoutPromise をたくさん試して、実行順を予想してみる
  • async/await の中断ポイントに注目する
  • 「同期」「非同期」の違いを説明できるようにしてみる

コードを書いて動きを観察するのが、いちばんの近道です!

分かりづらい点があれば、どんどん質問してください!一緒に理解を深めていきましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。