Javascript中的label語句

a公子小白發表於2019-02-16

最近在閱讀《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 語句,一定要使用描述性的標籤,同時不要巢狀過多的迴圈。




----來源《JavaScript高階程式設計第3版》

相關文章