2016-04-17 6 views
0

Mozilla Developer Network besagt, dassJavascript Etikett

Statement 1: „Die markierte Anweisung kann mit Bruch oder weiterhin Anweisungen verwendet werden Es ist eine Aussage mit einer Kennung prefixing, die Sie sich beziehen können.“.

Anweisung 2: "break kann mit jeder beschrifteten Anweisung verwendet werden, und continue kann mit Schleifenbeschriftungen verwendet werden."

Frage: Ermöglicht Javascript die Beschriftung einer Anweisung oder nur der Schleifen. Wenn es nur die Schleifenanweisung ist? Was ist die Relevanz von "Aussage 2" oben von MDN

Antwort

1

Sie können jede Aussage, einschließlich einer beschrifteten Aussage beschriften. Labels machen nur dann etwas Sinnvolles, wenn irgendwo innerhalb der etikettierten Aussage ein Kontext ist, in dem Pause oder Fortsetzen sinnvoll sind.

So

pointless: var x = 0; 

ist syntaktisch in Ordnung, aber das Etikett nicht (nicht) nichts zu tun.

Um zu break auf ein Etikett der Lage sein, muss die breakinnerhalb die markierten Anweisung sein. A break kann nicht wie in dem obigen Beispiel eine var Deklaration "innen" sein, weshalb es nicht sinnvoll ist. Dies funktioniert jedoch, und ist die typische Verwendung von break:

outerLoop: for (var i = 0; i < matrix.length; ++i) { 
    for (var j = 0; j < matrix[i].length; ++j) { 
    var inMatrix = matrix[i][j]; 
    if (somethingWeird(inMatrix)) 
     break outerLoop; 
    } 
} 

Wenn Sie aus einer verschachtelten Schleifenstruktur brechen wollen, ohne etwas umständlich Fahnen mit zu testen, können Sie eine markierte Anweisung wie diese verwenden.

Die leicht mysteriöse Notiz von MDN, die Sie von jeder Art von Aussage über break verfügbar erwähnen ist, bedeutet nur, dass Sie break von Sachen können, die nicht Schleifen sind:

someLabel: if (condition(something)) { 
    // code code code 
    if (shouldGiveUp()) 
    break someLabel; 
    // more code 
} 

, die wie ein „goto“ funktioniert zur nächsten Anweisung nach der äußeren if Anweisung. Dies ist mit continue nicht möglich, da continue nur bei Iterationskonstrukten sinnvoll ist.

+0

Wäre es möglich, in eine Schleife "sinnlos" einzubrechen, versuchte herauszufinden, wie "Statement2" von MDN in meiner Frage –

+0

@KiranVedula nur relevant macht, wenn die Schleife innerhalb der markierten Anweisung verschachtelt ist. Ich werde meine Antwort erweitern, um es zu erklären. – Pointy

+0

@KiranVedula Antwort aktualisiert. – Pointy