2012-06-30 21 views
11

MDN states:Utilizzando continuano in un do-while

Quando si utilizza continue senza etichetta, termina l'iterazione corrente del più interno racchiude while, do-while o for economico e continua l'esecuzione del ciclo con il prossimo iterazione.

Non sono sicuro del motivo per cui il seguente codice non funziona come previsto.

do { 
    continue; 
} while(false); 

Anche se la condizione è whilefalse, mi aspetto che venga eseguito sempre dal continue salti verso l'inizio del blocco, che esegue immediatamente continue nuovo, ecc In qualche modo però, il ciclo termina dopo un'iterazione. Sembra che continue sia ignorato.

Come funziona continue in un ciclo do-while?

+1

La condizione che viene soddisfatta è implicita. Se la condizione non viene soddisfatta, non c'è una successiva iterazione. –

+1

Mi è mancato. Immagino di essere stato fuorviato dall'ordine del codice sorgente. (Pensavo che 'continue' sarebbe sempre" saltato "nel codice sorgente.) – pimvdb

+1

Sembra * così *, specialmente se si usa un'etichetta di istruzioni. 'TOP: do {continua TOP; } while (false) ' –

risposta

7

Partenza questo 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());​ 

Sembra colpire il continuare, quindi uscire da che l'iterazione per eseguire il condizione di controllo. Poiché la condizione è falsa, termina.

2

Dopo il continua, il ciclo condizionale viene valutata, poiché è falsa, il ciclo terminerà.

4

Continua arresta l'esecuzione del resto del codice nel blocco e salta direttamente alla prossima iterazione del ciclo.

Dal momento che si sta facendo while(false) non c'è prossima iterazione

6

continue non ignorare il controllo while(false) ma semplicemente ignora il resto del codice all'interno delle parentesi.

4

continue non ricomincia l'iterazione corrente ma salta al successivo (come indicato nella citazione MDN).

causa di una condizione false, non c'è iterazione successiva - quindi l'intero ciclo viene completato.

1

mi aspetto che venga eseguito sempre dal continuare salti verso l'inizio del blocco

Il continue non salta l'inizio del blocco, salta al fine del blocco.