レッスンに戻る

while ループで表示される値は何ですか?

重要度: 4

各ループのイテレーションに対して、出力される値を書き留めて、そのあと正解と比較してください。

alert する値は、2 つのループどちらも同じですか、違いますか?

  1. プレフィックス形式 ++i

    let i = 0;
    while (++i < 5) alert( i );
  2. ポストフィックス形式 i++

    let i = 0;
    while (i++ < 5) alert( i );

この課題は、プレフィックス形式とポストフィックス形式が比較で使用されたときの結果が異なることを示しています。

  1. 1 から 4

    let i = 0;
    while (++i < 5) alert( i );

    最初の値は i = 1 です。なぜなら、++i は最初に i をインクリメントしてから新しい値を返します。それで、最初の比較は 1 < 5 で、alert1 が表示されます。

    その後、2, 3, 4… が続きます。この値は順番に表示されます。比較では常にインクリメントされた値が使用されます。なぜなら、++ が変数の前にあるからです。

    最後に、i = 45 にインクリメントされ、比較 while(5 < 5) の結果は偽になり、ループが停止します。それで、5 は表示されません。

  2. 1 から 5

    let i = 0;
    while (i++ < 5) alert( i );

    最初の値は再び i = 1 です。i++ のポストフィックス形式は、i をインクリメントしてから古い値を返します。それで、比較 i++ < 5 で使用されるのは i = 0 です(++i < 5 とは対照的です)。

    しかし、alert 呼び出しは別です。別のステートメントで、インクリメントと比較が行われた後に実行されます。それで、現在の i = 1 を取得できます。

    その後、2, 3, 4… が続きます。

    i = 4 で停止してみましょう。プレフィックス形式 ++i はそれをインクリメントして比較で 5 を使用します。しかし、ここにあるのはポストフィックス形式 i++ です。それで、i5 にインクリメントされますが、古い値が返されます。したがって、実際の比較は while(4 < 5) となります。これは真であり、制御は alert に移動します。

    i = 5 は最後の値です。次のステップ while(5 < 5) は偽になるからです。