プロが教えるわが家の防犯対策術!

javascriptを勉強中の初心者です。
以下のスクリプトを見てください。


var num = 1;

document.write("<p>");

for (var i = 0; i < 10; i++){
num *= 2;
document.write("i = " + i + ",num = " + num + "<br />");

if (num >= 100){
break;
}
}

document.write("<br />");


このスクリプトの実行結果は

i=0 , num=2
i=1 , num=4
i=2 , num=8
i=3 , num=16
i=4 , num=32
i=5 , num=64
i=6 , num=128

なのですが、なぜ一行目の i の値が 0 なのでしょうか。
forの中の変化式(i++)で、初期化後の値 0 から 1 増えるので、1 だと思うのですが・・・
1回目の処理では変化しない、等とは
参考書に書いてなかったので不思議に思いました。

ご存知の方、どうか理由を教えてください。
よろしくお願いいたします。

A 回答 (3件)

forループの



 i++

の部分がそのような処理にさせています。

 試しに

 ++i

と変えてみてください。

あなたの予想通りの結果になるはずです。

インクリメント()とデクリメント()は事情に合わせて変数の前後に置くことで挙動を変えることができます。これは大概の高級言語では実装されています。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。

++i を試して疑問が解けました。
for文の変化式についてだけでなく
インクリメントの前置/後置の挙動の違いを理解することができました。

回答いただき、本当にありがとうございました!

お礼日時:2014/04/11 14:24

for の 3 番目の項目が実行されるのはあるループを終えて次のループに移るときです。


最初のループの開始時はループとループの間ではないので 3 番目の項目は実行されません。

(処理)の中で continue や break を使っていない場合、
for ((文1); (文2); (文3)) {(処理)}

{
 (文1)
 while ((文2)) {
  (処理)
  (文3)
 }
}
と同じ処理になります。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。

3盤目の項目が実行されないのは知りませんでした。

回答ありがとうございました!

お礼日時:2014/04/11 14:25

単にこういうことをしているというイメージで良いでしょう。



<script>
for (var i = 0; i < 10;){
document.write(i);//実処理
i++;
}
</script>

結局、変化式であるi++が先に実行されると初期化式でわざわざ初期値を
設定しているのにそれが利用されなくなってロジックがブレるので
伝統的にfor構文は初期値を利用して繰り返し処理をすることになっています。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。

回答ありがとうございました!

お礼日時:2014/04/11 14:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!