最近在閱讀《JavaScript高級程序設計第3版》的過程當中,看到了label語句的使用,由於以前沒使用過,以爲有必要學習一下,特此記錄。
label語句是ECMA中定義的語句,所以不存在兼容性的問題,使用label語句是爲了給代碼添加標籤,方便未來使用,語法以下:學習
label: statement //下面是一個示例: start: for (var i=0; i < count; i++) { alert(i); }
label語句能夠與break 和 continue 語句聯合使用,從而返回代碼中特定的位置。這種聯合使用的狀況多發生在循環嵌套的狀況下:設計
var num = 0; outermost: for (var i=0; i < 10; i++) { for (var j=0; j < 10; j++) { if (i == 5 && j == 5) { break outermost; } num++; } } alert(num); //55
在這個例子中,outermost 標籤表示外部的 for 語句。若是每一個循環正常執行 10 次,則 num++ 語句就會正常執行 100次。換句話說,若是兩個循環都天然結束,num 的值應該是 100。但內部循環中 的 break語句帶了一個參數:要返回到的標籤。添加這個標籤的結果將致使 break 語句不只會退出內 部的 for 語句(即便用變量 j的循環),並且也會退出外部的 for 語句(即便用變量 i 的循環)。爲此, 當變量 i 和 j 都等於 5 時,num 的值正好是55。一樣,continue 語句也能夠像這樣與 label 語句聯 用,以下面的例子所示:調試
var num = 0; outermost: for (var i=0; i < 10; i++) { for (var j=0; j < 10; j++) { if (i == 5 && j == 5) { continue outermost; } num++; } } alert(num); //95
在這種狀況下,continue 語句會強制繼續執行循環——退出內部循環,執行外部循環。當 j 是 5 時,continue 語句執行,而這也就意味着內部循環少執行了 5 次,所以 num 的結果是 95。
雖然聯用 break、continue 和 label 語句可以執行復雜的操做,但若是使用過分,也會給調試 帶來麻煩。在此,咱們建議若是使用 label 語句,必定要使用描述性的標籤,同時不要嵌套過多的循環。code
----來源《JavaScript高級程序設計第3版》