Javascript中的label語句

最近在閱讀《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版》
相關文章
相關標籤/搜索