while ループで表示される値は何ですか?
各ループのイテレーションに対して、出力される値を書き留めて、そのあと正解と比較してください。
alert
する値は、2 つのループどちらも同じですか、違いますか?
-
プレフィックス形式
++i
let i = 0; while (++i < 5) alert( i );
-
ポストフィックス形式
i++
let i = 0; while (i++ < 5) alert( i );
この課題は、プレフィックス形式とポストフィックス形式が比較で使用されたときの結果が異なることを示しています。
-
1 から 4
let i = 0; while (++i < 5) alert( i );
最初の値は
i = 1
です。なぜなら、++i
は最初にi
をインクリメントしてから新しい値を返します。それで、最初の比較は1 < 5
で、alert
で1
が表示されます。その後、
2, 3, 4…
が続きます。この値は順番に表示されます。比較では常にインクリメントされた値が使用されます。なぜなら、++
が変数の前にあるからです。最後に、
i = 4
が5
にインクリメントされ、比較while(5 < 5)
の結果は偽になり、ループが停止します。それで、5
は表示されません。 -
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++
です。それで、i
は5
にインクリメントされますが、古い値が返されます。したがって、実際の比較はwhile(4 < 5)
となります。これは真であり、制御はalert
に移動します。i = 5
は最後の値です。次のステップwhile(5 < 5)
は偽になるからです。