while でどの値が表示される?
各ループで、どの値が表示されるか、あなたの意見を書きなさい。また、それと答えを見比べてみてください。
両方のループは同じ数だけ alert
されますか?それとも違いますか?
-
プレフィックス形式
++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
を5
にインクリメントしますが、古い値を返します。従って、比較は実際while(4 < 5)
– true です。そして制御はalert
に行きます。値
i=5
は最後です。なぜなら次のステップwhile(5 < 5)
は偽になるからです。