2016-04-17 1 views
0

Mozillaの開発者ネットワークはJavascriptのラベル

がステートメント1と述べている:「ラベル付きステートメントはブレークで使用するか、文を継続することができますそれはあなたが参照できる識別子で声明を前置されています。」

ステートメント2: "breakはラベル付きステートメントで使用でき、continueステートメントはループステートメントで使用できます。"

質問:javascriptでは、ステートメントやループだけにラベルを付けることができますか?ループ文であれば?上記の「声明2」とMDNの関連性

答えて

1

ラベル付きのステートメントを含め、どのステートメントにもラベルを付けることができます。ラベルは、ラベル付きステートメントのどこかが、中断または継続が意味をなさないコンテキストである場合にのみ役立ちます。

したがって

pointless: var x = 0; 

は構文的にOKですが、ラベルには何もする(することはできません)しません。

ラベルにbreakができるようにするには、break内にあるラベル付きのステートメントにする必要があります。 breakは上記の例のようにvar宣言の "内側"にすることはできません。そのため、それは有用ではありません。しかし、これは動作し、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; 
    } 
} 

あなたがテストするために、いくつかの厄介なフラグを持たずに、ネストされたループ構造から抜け出すにしたい場合は、あなたがそのようなラベル付きステートメントを使用することができます。

あなたが文の任意の並べ替えから利用可能であることについてbreakに言及MDNから少し不思議なノートはちょうどあなたがループのものからbreakではないことができることを意味します「後藤」のように動作します

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

外側のifステートメントの次のステートメントに移動します。 continueでこれを行うことはできません。なぜなら、continueは繰り返し構造でのみ意味があるからです。

+0

ループから「無意味」に侵入する可能性はありますか?私の質問のMDNの "Statement2"はループがラベル付きステートメントの中にネストされている場合にのみ、どのように関連性を持たせますか –

+0

@KiranVedula説明のために私の答えを広げます。 – Pointy

+0

@KiranVedulaの回答が更新されました。 – Pointy

関連する問題