sa_meichan
@sa_meichan

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Javascriptの++インクリメントを+1に置き換えると無限ループになる理由がわかりません。

解決したいこと

1から100まで数値をwhile文を使ってコンソールに出力したいのですが、
Javascriptの++インクリメントを+1に置き換えると
無限ループになる理由がわかりません。
そもそも置き換えるなという話なのかもしれないのですが
理由が知りたいです。よろしくお願いします。

発生している問題・エラー

無限ループ

該当するソースコード

//これだとエラーになる
        let x = 0;
        while (x < 100) {
            x + 1;
            console.log(x);
        }
//これだとエラーにならない
        let x = 0;
        while (x < 100) {
            x ++;
            console.log(x);
        }
//これもエラーにならない
        let x = 0;
        while (x < 100) {
            ++x;
            console.log(x);
        }

自分で試したこと

インクリメントが右についていたら
変数に代入した後に加算、
左についていたら加算した後に変数に代入ということはわかったのですが、
検索しても上記の説明しか出ず…検索方法が悪いのかもしれませんが
どなたかご教授いただければ幸いです。

0

2Answer

x + 1;x = x + 1; に変更して、更新した値を変数xに再代入するようにしましょう。

2Like

Comments

  1. @sa_meichan

    Questioner

    そうですよね、X+1だけじゃ変数Xの値は変わりませんね…。
    早い回答ありがとうございました。

++インクリメントは後置でも前置でも変数xが更新されるので、繰り返しのなかで条件x < 100が偽になる時がきます。
「加算した後(または加算する前)に代入」というのは下記のコードの変数ybについてになります。
一方で、インクリメントしている変数xaが 3 -> 4 に変更されているのもお分かりいただけると思います。

let x = 3;
const y = x++;

console.log(`x:${x}, y:${y}`);
// Expected output: "x:4, y:3"

let a = 3;
const b = ++a;

console.log(`a:${a}, b:${b}`);
// Expected output: "a:4, b:4"

x + 1は変数xの値は変わらないので、永久に条件x < 100が真になり、無限ループになります。

let x = 3;
const y = x + 1;
console.log(`x:${x}, y:${y}`);
// Expected output: "x:3, y:4"
2Like

Comments

  1. @sa_meichan

    Questioner

    なるほど!!!!!
    「x + 1は変数xの値は変わらない」
    「++インクリメントは後置でも前置でも変数xが更新される」
    完全に腑に落ちました。
    改めてみるとなぜこれでxが変わると勘違いしてしまったのか…という感じです。
    早い回答ありがとうございました。

Your answer might help someone💌