2016-03-26 11 views
2

私はdo-whileループを学習しており、なぜこのループが無限に動作しているのか理解できません。なぜdo-whileループが無限にあるのですか?

var condition = true 

var getToDaChoppa = function(){ 

     do { 
      console.log("I'm the do loop"); 
     } while(condition === true){ 
      console.log("I'm the while loop"); 
      condition = false; 
     }; 

    }; 

getToDaChoppa(); 
+5

ループは 'do'で始まり、' while'で終わり、間には 'condition'がありません。後のブロックは単なるブロックです。 –

答えて

3

このループは(あなたの現在の例を与えられていないが起こるんどの)完了するまで、それはループの外で、あなたのコードのいずれかを実行することはありませんので、あなたは、 INSIDE falseにループをcondition変数を設定することはありません。あなたがループ内falsecondition変数を設定していることを確認してください:

do { 
    console.log("I'm the do loop"); 

    if (some_condition_is_met) { 
     condition = false; 
    } 
} while(condition === true); 
+0

HIダーリン、私は間違いを分かった!あなたは改善された答えを与えることができます、そして、私は将来的にユーザーの答えを受け入れるでしょうか? –

+0

確かに、私は答えを例で更新しました。 –

2

このような作品ながら/実行します。したがって、あなたは決してループ内のconditionを変更することはありません。

do { 
    //code block to be executed 
} 
while (condition); 

//Code after do/while 
+0

'while'ループのビットは何をしますか?それは条件が満たされているかどうかをチェックするためですか? –

+0

あなたは基本的にそこに何かをすることができます。カウンタなどを管理してください。遅かれ早かれ '条件'が 'false'に設定されることを確認する必要があります。そうでなければ、決して終了しません。 – Maak

0

do..whileがあるとwhile..があります:なしdo..while..声明はありません。

JavaScriptでは、block statementsは他のフロー制御/定義構造から独立しています。不足しているステートメントのセミコロンのために、これは構文エラー(Javaではそうです)を引き起こしません。

の構文に関するいくつかの追加の説明があります。他の答えは論理エラーをカバーします。一方

do { 
    console.log("I'm the do loop"); 
} while(condition === true) // semicolons optional in JS (see ASI): 
          // 'do..while' statement ENDS HERE 
{ // starts a block statement which has naught to do with 'do..while' above 
    // THERE IS NO WHILE LOOP HERE 
    console.log("I'm the while loop"); 
    condition = false; 
}; // useless semicolon which further leads to confusion 

do..が省略された場合、それが終了しているだろう「だけ」while文として解析されていたであろう。

// Basic WHILE statement - no 'do..' code, so NOT parsed as a 'do..while'! 
while(condition === true) 
{ // this block is now part of the 'while' statement loop 
    console.log("I'm the while loop"); 
    condition = false; 
}; 
関連する問題