2012-06-30 9 views
11

MDN states:がdo-whileループで継続使用して

ラベルなしcontinueを使用する場合、それはwhiledo-whileまたはfor文を囲む最も内側の現在の反復を終了して、次のループの実行を継続繰り返し。

私は次のコードが期待通りに動作しない理由はわかりません。

do { 
    continue; 
} while(false); 

while条件がfalseですが、私はループが一回の反復の後に終了し、continueはすぐに再びcontinueを実行ブロックの開始に向けてジャンプするので、それはどういうわけかしかしなど、永遠に実行するように期待しています。 continueは無視されます。

do-whileループではcontinueはどのようにして動作しますか?

+1

条件が満たされています。条件が満たされない場合、次の反復はありません。 –

+1

私はそれを逃した。私はソースコードの順序に惑わされたと思います。 (私は、 'continue'はいつもソースコード内で"飛び乗る "と思っていました) – pimvdb

+1

これは、特にステートメントラベルを使用している場合はそうです。 'TOP:do {TOPを続ける; } while(false) ' –

答えて

7

チェックアウトこのjsFiddleは:http://jsfiddle.net/YdpJ2/3/

var getFalse = function() { 
    alert("Called getFalse!"); 
    return false; 
}; 

do { 
    continue; 
    alert("Past the continue? That's impossible."); 
} while(getFalse());​ 

チェック条件を実行するために、その繰り返しの打破、引き続きヒットするように見えます。条件はfalseなので、終了します。私はそれがため、永遠に実行することを期待

2

続きを続けると、ループ条件が評価されます。偽であるため、ループは終了します。

4

ブロック内の残りのコードの実行を停止し、ループの次の反復に直接ジャンプします。

あなたはwhile(false)をやっているので、何の次の反復

6

continueチェックwhile(false)をスキップしませんが、単純にカッコ内のコードの残りの部分を無視していませんがあります。

4

continueは、現在の反復では再開しませんが、次のものにスキップします(MDN引用のように)。

のため、falseの条件のため、次の繰り返しはありませんのでループ全体が完了します。

1

continueは、ブロックの先頭にジャンプしない の開始に向けたジャンプブロック

を続け、それがブロックの終わりにジャンプします。

関連する問題