2016-04-17 60 views
0

Mozilla開發者網絡指出的Javascript標籤

聲明1:「標記的語句可以帶斷點使用或continue語句是前綴,使用它可以指一個標識符的聲明。」

聲明2:「break可以與任何帶標籤的語句一起使用,並且continue可以與循環標籤語句一起使用。」

問題:javascript是否允許標記任何語句或僅循環。如果它只是循環語句?什麼是MDN的「聲明2」的相關性

回答

1

您可以標記任何語句,包括帶標籤的語句。當標籤語句內的某個地方是中斷或繼續有意義的上下文時,標籤只會做一些有用的事情。

因此

pointless: var x = 0; 

在語法上是確定的,但標籤不會(也不能)做任何事情。

爲了能夠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; 
    } 
} 

如果你想打破了一個嵌套循環結構,而不必有些彆扭標誌進行測試,您可以使用標籤的語句這樣。

從MDN的略顯神祕的注意,你提到關於break從任何一種說法是可用只是意味着你可以從東西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