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 break
innerhalb 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.
Wäre es möglich, in eine Schleife "sinnlos" einzubrechen, versuchte herauszufinden, wie "Statement2" von MDN in meiner Frage –
@KiranVedula nur relevant macht, wenn die Schleife innerhalb der markierten Anweisung verschachtelt ist. Ich werde meine Antwort erweitern, um es zu erklären. – Pointy
@KiranVedula Antwort aktualisiert. – Pointy