JavaScriptのループで無限ループが起きる原因と対策を初心者向けに徹底解説!
生徒
「JavaScriptでループを使っていたら、ずっと止まらなくなってしまいました…。パソコンが固まったみたいで怖いです…」
先生
「それは『無限ループ』と呼ばれる現象ですね。ループが終わらない原因と、それを防ぐ方法を一緒に学んでみましょう。」
生徒
「どうしてそんなことが起きるんですか?初心者でも避けられますか?」
先生
「もちろん避けられます!一つ一つ丁寧に見ていきましょう。」
1. 無限ループとは?
JavaScript(ジャバスクリプト)でプログラムを書くとき、同じ処理をくり返す「ループ(繰り返し)」はとても便利です。
しかし、ある条件がずっと満たされないままだと、ループが終わらなくなってしまいます。これを無限ループと呼びます。
無限ループが起きると、ブラウザがフリーズしたり、パソコンの動きが止まってしまったりすることがあります。
2. よく使われるループの書き方
JavaScriptでよく使われるループの1つがwhile文です。
whileとは、「〇〇の間はくり返す」という意味です。
例えば、次のような書き方をします。
let count = 0;
while (count < 5) {
console.log("くり返し中");
count++;
}
くり返し中
くり返し中
くり返し中
くり返し中
くり返し中
この場合、countが0から始まって、1ずつ増えていき、5になるまでループします。
3. 無限ループが起きる例と原因
無限ループが起きてしまうのは、たとえば次のようなコードです。
let number = 1;
while (number < 5) {
console.log("ループ中");
// number++; を書き忘れている!
}
ループ中
ループ中
ループ中
(ずっと続く…)
この例では、numberの値が増えないため、number < 5の条件がいつまでも変わらず、ループが止まりません。
原因は「ループ内で条件が変化しないこと」です。
4. 対策1:変数の更新を忘れない
無限ループを防ぐためには、ループの中で使っている変数の値が、ちゃんと変わるように書くことが大切です。
let number = 1;
while (number < 5) {
console.log("ループ中");
number++; // ここで値を変えることで止まる
}
ループ中
ループ中
ループ中
ループ中
このように、number++(1ずつ増やす)を入れることで、numberが最終的に5になり、ループが止まります。
5. 対策2:ループの条件に気をつける
条件文が間違っていると、無限ループが起こることもあります。
たとえば、「数字が5以上のときに止めたい」のに、number < 5と書いてしまうと、条件が逆になって止まりません。
let number = 10;
while (number < 5) {
console.log("止まりません!");
number++;
}
この例ではnumberが10なので、そもそも条件に入らず、実行されないように見えますが、逆に条件を正しく書いていないと、いつまで経っても終わらないことになります。
6. 対策3:for文ならミスが減る
同じような繰り返しなら、for文を使うと、ミスを減らしやすくなります。
for文では、「スタートの値」「終わりの条件」「1回ごとにどうするか」をすべて一行で書けるからです。
for (let i = 0; i < 5; i++) {
console.log(i + " 回目のくり返し");
}
0 回目のくり返し
1 回目のくり返し
2 回目のくり返し
3 回目のくり返し
4 回目のくり返し
for文はループの中で変数が自動的に変わるため、更新忘れによる無限ループが起きにくいのです。
7. 対策4:ループが止まる条件を先に考える
ループを書くときは、「いつ終わるのか」を最初に考えるようにしましょう。
- 条件を満たさなくなったら止める
- カウンター(数える変数)を使って一定回数で終わらせる
例:5回だけメッセージを表示したい場合
let count = 0;
while (count < 5) {
console.log("表示中:" + count);
count++;
}
8. 対策5:条件が複雑なときは関数に分ける
複雑な条件をループに直接書くと、何が原因で止まらないのかがわかりにくくなります。
そういうときは、条件のチェックを関数にまとめるとわかりやすくなります。
function isContinue(num) {
return num < 10;
}
let number = 0;
while (isContinue(number)) {
console.log("現在の数:" + number);
number++;
}
関数を使うと、「なぜループが止まらないのか」がはっきりしやすくなります。
9. 忘れやすいチェックポイント
- ループの中で変数がちゃんと変わっているか
- ループの条件が正しいか(終わる条件になっているか)
- 間違ってループの中に「無限に実行する処理」がないか
- 動作確認は最初は小さい値で試す(例:5回だけループさせてみる)