カテゴリ: JavaScript 更新日: 2025/10/06

JavaScriptのループで無限ループが起きる原因と対策を初心者向けに徹底解説!

JavaScriptのループ処理でよくある無限ループの原因と対策
JavaScriptのループ処理でよくある無限ループの原因と対策

先生と生徒の会話形式で理解しよう

生徒

「JavaScriptでループを使っていたら、ずっと止まらなくなってしまいました…。パソコンが固まったみたいで怖いです…」

先生

「それは『無限ループ』と呼ばれる現象ですね。ループが終わらない原因と、それを防ぐ方法を一緒に学んでみましょう。」

生徒

「どうしてそんなことが起きるんですか?初心者でも避けられますか?」

先生

「もちろん避けられます!一つ一つ丁寧に見ていきましょう。」

1. 無限ループとは?

1. 無限ループとは?
1. 無限ループとは?

JavaScript(ジャバスクリプト)でプログラムを書くとき、同じ処理をくり返す「ループ(繰り返し)」はとても便利です。

しかし、ある条件がずっと満たされないままだと、ループが終わらなくなってしまいます。これを無限ループと呼びます。

無限ループが起きると、ブラウザがフリーズしたり、パソコンの動きが止まってしまったりすることがあります。

2. よく使われるループの書き方

2. よく使われるループの書き方
2. よく使われるループの書き方

JavaScriptでよく使われるループの1つがwhile文です。

whileとは、「〇〇の間はくり返す」という意味です。

例えば、次のような書き方をします。


let count = 0;
while (count < 5) {
  console.log("くり返し中");
  count++;
}

くり返し中
くり返し中
くり返し中
くり返し中
くり返し中

この場合、countが0から始まって、1ずつ増えていき、5になるまでループします。

3. 無限ループが起きる例と原因

3. 無限ループが起きる例と原因
3. 無限ループが起きる例と原因

無限ループが起きてしまうのは、たとえば次のようなコードです。


let number = 1;
while (number < 5) {
  console.log("ループ中");
  // number++; を書き忘れている!
}

ループ中
ループ中
ループ中
(ずっと続く…)

この例では、numberの値が増えないため、number < 5の条件がいつまでも変わらず、ループが止まりません。

原因は「ループ内で条件が変化しないこと」です。

4. 対策1:変数の更新を忘れない

4. 対策1:変数の更新を忘れない
4. 対策1:変数の更新を忘れない

無限ループを防ぐためには、ループの中で使っている変数の値が、ちゃんと変わるように書くことが大切です。


let number = 1;
while (number < 5) {
  console.log("ループ中");
  number++; // ここで値を変えることで止まる
}

ループ中
ループ中
ループ中
ループ中

このように、number++(1ずつ増やす)を入れることで、numberが最終的に5になり、ループが止まります。

5. 対策2:ループの条件に気をつける

5. 対策2:ループの条件に気をつける
5. 対策2:ループの条件に気をつける

条件文が間違っていると、無限ループが起こることもあります。

たとえば、「数字が5以上のときに止めたい」のに、number < 5と書いてしまうと、条件が逆になって止まりません。


let number = 10;
while (number < 5) {
  console.log("止まりません!");
  number++;
}

この例ではnumberが10なので、そもそも条件に入らず、実行されないように見えますが、逆に条件を正しく書いていないと、いつまで経っても終わらないことになります。

6. 対策3:for文ならミスが減る

6. 対策3:for文ならミスが減る
6. 対策3:for文ならミスが減る

同じような繰り返しなら、for文を使うと、ミスを減らしやすくなります。

for文では、「スタートの値」「終わりの条件」「1回ごとにどうするか」をすべて一行で書けるからです。


for (let i = 0; i < 5; i++) {
  console.log(i + " 回目のくり返し");
}

0 回目のくり返し
1 回目のくり返し
2 回目のくり返し
3 回目のくり返し
4 回目のくり返し

for文はループの中で変数が自動的に変わるため、更新忘れによる無限ループが起きにくいのです。

7. 対策4:ループが止まる条件を先に考える

7. 対策4:ループが止まる条件を先に考える
7. 対策4:ループが止まる条件を先に考える

ループを書くときは、「いつ終わるのか」を最初に考えるようにしましょう。

  • 条件を満たさなくなったら止める
  • カウンター(数える変数)を使って一定回数で終わらせる

例:5回だけメッセージを表示したい場合


let count = 0;
while (count < 5) {
  console.log("表示中:" + count);
  count++;
}

8. 対策5:条件が複雑なときは関数に分ける

8. 対策5:条件が複雑なときは関数に分ける
8. 対策5:条件が複雑なときは関数に分ける

複雑な条件をループに直接書くと、何が原因で止まらないのかがわかりにくくなります。

そういうときは、条件のチェックを関数にまとめるとわかりやすくなります。


function isContinue(num) {
  return num < 10;
}
let number = 0;
while (isContinue(number)) {
  console.log("現在の数:" + number);
  number++;
}

関数を使うと、「なぜループが止まらないのか」がはっきりしやすくなります。

9. 忘れやすいチェックポイント

9. 忘れやすいチェックポイント
9. 忘れやすいチェックポイント
  • ループの中で変数がちゃんと変わっているか
  • ループの条件が正しいか(終わる条件になっているか)
  • 間違ってループの中に「無限に実行する処理」がないか
  • 動作確認は最初は小さい値で試す(例:5回だけループさせてみる)
関連記事:
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScript × ES6の連携まとめ!安全でモダンなJavaScript開発の鍵
New2
TypeScript
TypeScriptの型システムとは?静的型付けのメリットと基本
New3
JavaScript
JavaScriptの正規表現で繰り返し指定(* + ? {n,m})を学ぼう
New4
TypeScript
TypeScriptとESNextの連携を完全ガイド!最新機能を使いこなす設定と対応法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptの日時操作Tips!実務で役立つテクニック集
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでESLintとPrettierを導入!コード整形ルールを自動で統一する方法
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.5
Java&Spring記事人気No5
TypeScript
TypeScriptのif文の使い方を完全ガイド!初心者でもわかる条件分岐
No.6
Java&Spring記事人気No6
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの正規表現で文字列を置換する方法(replaceメソッド)
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptで非同期イテレーター(for await of)を活用する