2016-05-17 1 views
0

私は数値を反復し、数字5をスキップする小さなスクリプトを作成しています。これはcontinue;ステートメント/ラベルでこれを達成したいと思います。ここでなぜ継続しますか。ステートメントフリーズブラウザ?

は私のコードです:

<p id="test"></p> 

<script> 

var i, text; 

text = ""; 
i = 0; 

for (;i<8;) { 
    if (i === 5) {continue;} 
    text += "The number is " + i + "<br>"; 
    i++; 
} 

document.getElementById('test').innerHTML = text; 

</script> 

私は任意の誤植を見ることができないが、今12時間以上をコードする、多分私は何かを明らかに監督していますよ。もしそうなら、私は謝罪します。

break;ステートメントを使用して番号5で停止したい場合に機能します。

<p id="test"></p> 

<script> 

var i, text; 

i = 0; 
text = ""; 

for (;i<8;) { 
    if (i === 5) {break;} 
    text += "The number is " + i "<br>"; 
    i++; 
} 

document.getElementById('test').innerHTML = text; 

</script> 
+0

あなたは呼び出しを行う前にiをインクリメントする必要があります。それ以外の場合は、ループに入ります –

答えて

6
if (i === 5) {continue;} 

は、コントロールが先に行くとiをインクリメントすることを可能にすることはありません。したがって、iが5になると、常に戻ってきます。

ソリューション:

if (i === 5) { 
    i++; // Increament `i` first 
    continue; 
} 

OR、for第三引数を使用。

for (; i<8; i++) { 
      ^^^ // Increment `i` for each iteration 

もう一つの単純なことはif条件を使用して行うことができます。

for (; i < 8; i++) { 

    // If i is not 5, then only append to the string. 
    if (i !== 5) { 
     text += "The number is " + i + "<br>"; 
    } 
} 
+0

だから、(; 1 <8; i ++)は問題を解決するでしょうか? – super11

+1

@ super11はい、それは解決されます – Tushar

+0

テストされ、動作します。イテレータロジックの前で停止が続きます。知っておいてよかった。ありがとう。 – super11

1

値が増分されないため、これは無限ループを引き起こしています。 continueは、次の反復に移りますが、値を増やすためにステートメントを定義していないため、これは決して発生しません。ループの本体の中にあなたのインクリメントを実行とは対照的に、

は、次のようにループをリファクタリング考えてみましょう:

<script> 
    var text = ""; 
    // This is the most common approach to defining a for-loop as it handles defining 
    // your iterator, defining a stop condition and handles how to increment your value 
    // after each iteration 
    for (var i = 0; i < 8; i++) { 
     if (i === 5) {break;} 
     text += "The number is " + i "<br>"; 
    } 
    document.getElementById('test').innerHTML = text; 
</script> 
1
if (i === 5) {continue;} 

iが5であるとき、それはi++に到達するためにもう一度チャンスを得ることはありません。したがって、iは5になり、ループを終了することはありません。

関連する問題