ECMAScript break 和 continue 語句

break 和 continue 語句對循環中的代碼執行提供了更嚴格的控制。

break 和 continue 語句的不同之處

break 語句可以立即退出循環,阻止再次反復執行任何代碼。

而 continue 語句只是退出當前循環,根據控制表達式還允許繼續進行下一次循環。

例如:

var iNum = 0;
for (var i=1; i<10; i++) {
  if (i % 5 == 0) {
    break;
  }
  iNum++;
}
alert(iNum);	//輸出 "4"

在以上代碼中,for 循環從 1 到 10 迭代變量 i。在循環主體中,if 語句將(使用取模運算符)檢查 i 的值是否能被 5 整除。如果能被 5 整除,將執行 break 語句。alert 顯示 "4",即退出循環前執行循環的次數。

如果用 continue 語句代替這個例子中的 break 語句,結果將不同:

var iNum = 0;
for (var i=1; i<10; i++) {
  if (i % 5 == 0) {
    continue;
  }
  iNum++;
}
alert(iNum);	//輸出 "8"

這里,alert 將顯示 "8",即執行循環的次數。可能執行的循環總數為 9,不過當 i 的值為 5 時,將執行 continue 語句,會使循環跳過表達式 iNum++,返回循環開頭。

與有標簽的語句一起使用

break 語句和 continue 語句都可以與有標簽的語句聯合使用,返回代碼中的特定位置。

通常,當循環內部還有循環時,會這樣做,例如:

var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
  for (var j=0; j<10; j++) {
    if (i == 5 && j == 5) {
    break outermost;
  }
  iNum++;
  }
}
alert(iNum);	//輸出 "55"

在上面的例子中,標簽 outermost 表示的是第一個 for 語句。正常情況下,每個 for 語句執行 10 次代碼塊,這意味著 iNum++ 正常情況下將被執行 100 次,在執行完成時,iNum 應該等于 100。這里的 break 語句有一個參數,即停止循環后要跳轉到的語句的標簽。這樣 break 語句不止能跳出內部 for 語句(即使用變量 j 的語句),還能跳出外部 for 語句(即使用變量 i 的語句)。因此,iNum 最后的值是 55,因為當 i 和 j 的值都等于 5 時,循環將終止。

可以以相同的方式使用 continue 語句:

var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
  for (var j=0; j<10; j++) {
    if (i == 5 && j == 5) {
    continue outermost;
  }
  iNum++;
  }
}
alert(iNum);	//輸出 "95"

在上例中,continue 語句會迫使循環繼續,不止是內部循環,外部循環也如此。當 j 等于 5 時出現這種情況,意味著內部循環將減少 5 次迭代,致使 iNum 的值為 95。

提示:可以看出,與 break 和 continue 聯合使用的有標簽語句非常強大,不過過度使用它們會給調試代碼帶來麻煩。要確保使用的標簽具有說明性,同時不要嵌套太多層循環。

提示:想了解什么是有標簽語句,請閱讀 ECMAScript 標簽語句 這一節。