1. 程式人生 > >如何理解js中的label

如何理解js中的label

在看《JavaScript高階程式設計》第三版的第三章時發現label語句,在平常學習js基本沒有遇見,經過學習和練習,label與break、continue結合可以節省一些步驟,廢話不多說直接上碼。

先來一個正常的for迴圈:

 var num = 0;
        for (var i = 0 ; i < 10 ; i++){
             for (var j = 0 ; j < 10 ; j++){
                num++;
             }
        }
        alert(num); // 100
經過雙層迴圈後,num為100,這裡應該沒有什麼問題

加入break:
 

var num = 0;
        for (var i = 0 ; i < 10 ; i++){
            console.log("i="+i)
             for (var j = 0 ; j < 10 ; j++){
                console.log("j="+j) 
                  if( i == 5 && j == 5 ){
                        console.log("i,j=5")
                        break;
                  }
                num++;//95             
             }
        }
        console.log(num);
迴圈在 i 為5,j 為5的時候跳出 j迴圈,但會繼續執行 i 迴圈,所以num少了五次++的數,輸出 95

加入continue:
 

 var num = 0;
        for (var i = 0 ; i < 10 ; i++){
            console.log("i="+i)
             for (var j = 0 ; j < 10 ; j++){
                console.log("j="+j) 
                  if( i == 5 && j == 5 ){
                        console.log("i,j=5")
                        continue;
                  }
                num++;//99             
             }
        }
        console.log(num);
輸出為99,在i=5,j=5時跳過,但是繼續j=6的操作,所以num只缺少一次++

上面兩個例子說明了正常情況下加入break和continue,兩種不同的跳出迴圈。而label在程式碼中新增標籤,與break和continue聯合使用,從而返回程式碼中特定的位置。

在帶break的語句中加入label:

 var num = 0;
        outPoint://這裡為label,標籤名為outPoint
        for (var i = 0 ; i < 10 ; i++){
            console.log("i="+i)
            for (var j = 0 ; j < 10 ; j++){
                console.log("j="+j) 
                if( i == 5 && j == 5 ){
                        console.log("i,j=5")
                        console.log(num) 
                        break outPoint;
                }
            num++;//55
            }
        }
        console.log(num); 
迴圈在 i 為5,j 為5的時候跳出雙迴圈,返回到outPoint層繼續執行除迴圈外的接下來的操作,輸出 55

在帶continue的語句中加入label

 var num = 0;
        outPoint:
        for (var i = 0 ; i < 10 ; i++){
            console.log("i="+i)
            for (var j = 0 ; j < 10 ; j++){
                console.log("j="+j) 
                if( i == 5 && j == 5 ){
                        console.log("i,j=5")
                        console.log(num) 
                        continue outPoint;
                }
            num++;//95
            }
        }
輸出95,迴圈在 i 為5,j 為5的時候跳出雙迴圈,返回到outPoint層繼續執行未結束的迴圈,即從i=6開始,num只跳過了五次++

 

需要注意的不要過度使用label會給除錯帶來麻煩,使用時要有描述性的標籤,也同時不要巢