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回目の処理では変化しない、等とは
参考書に書いてなかったので不思議に思いました。
ご存知の方、どうか理由を教えてください。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
forループの
i++
の部分がそのような処理にさせています。
試しに
++i
と変えてみてください。
あなたの予想通りの結果になるはずです。
インクリメント()とデクリメント()は事情に合わせて変数の前後に置くことで挙動を変えることができます。これは大概の高級言語では実装されています。
お礼が遅くなり申し訳ありません。
++i を試して疑問が解けました。
for文の変化式についてだけでなく
インクリメントの前置/後置の挙動の違いを理解することができました。
回答いただき、本当にありがとうございました!
No.3
- 回答日時:
単にこういうことをしているというイメージで良いでしょう。
<script>
for (var i = 0; i < 10;){
document.write(i);//実処理
i++;
}
</script>
結局、変化式であるi++が先に実行されると初期化式でわざわざ初期値を
設定しているのにそれが利用されなくなってロジックがブレるので
伝統的にfor構文は初期値を利用して繰り返し処理をすることになっています。
No.2
- 回答日時:
for の 3 番目の項目が実行されるのはあるループを終えて次のループに移るときです。
最初のループの開始時はループとループの間ではないので 3 番目の項目は実行されません。
(処理)の中で continue や break を使っていない場合、
for ((文1); (文2); (文3)) {(処理)}
は
{
(文1)
while ((文2)) {
(処理)
(文3)
}
}
と同じ処理になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
範囲指定したセルを1つずつ飛...
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
ボタンが押された時にループか...
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
VBAでの一時停止と再開の方法
-
ループフリー
-
データベースをEOFまでループさ...
-
VBA Dir関数でファイルをループ...
-
流れ図(フローチャート)が分か...
-
レインボー色ってどうやって表...
-
c++ ランダムウォーク
-
ループからの抜け出し方
-
素数の個数を求めるプログラミング
-
アクティブセルから、A列最終行...
-
(C#)フォームのキャンセルで計...
-
ExcelVBA FindNextを使用して条...
-
CSVファイルの特定の行だけを読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
DoEventsが必要な理由について
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
VBA for i=1 to lastrow
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
VBAでの一時停止と再開の方法
-
「人を傷つけることは悪いこと...
-
VBAで3秒だけ時間を止めたい
-
DOSコマンドのループ内のTIMEコ...
-
アクティブセルから、A列最終行...
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
ループフリー
-
VBA for文が止まらない
-
null 参照の例外が実行時に発生...
-
vbscriptでIE自動入力(途中で...
-
フラグについて
-
VBA Dir関数でファイルをループ...
おすすめ情報