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)は偽になるからです。