如何理解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會給除錯帶來麻煩,使用時要有描述性的標籤,也同時不要巢