ECMAScript break 和 continue 语句


break 和 continue 语句对循环中的代码执行提供了更严格的控制。

break 和 continue 语句的不同之处

break 语句可以立即退出循环,阻止再次反复执行任何代码。

而 continue 语句只是退出当前循环,根据控制表达式还允许继续进行下一次循环。

例如:

  1. var iNum = 0;
  2.  
  3. for (var i=1; i<10; i++) {
  4. if (i % 5 == 0) {
  5. break;
  6. }
  7. iNum++;
  8. }
  9. alert(iNum); //输出 "4"

在以上代码中,for 循环从 1 到 10 迭代变量 i。在循环主体中,if 语句将(使用取模运算符)检查 i 的值是否能被 5 整除。如果能被 5 整除,将执行 break 语句。alert 显示 "4",即退出循环前执行循环的次数。

如果用 continue 语句代替这个例子中的 break 语句,结果将不同:

  1. var iNum = 0;
  2.  
  3. for (var i=1; i<10; i++) {
  4. if (i % 5 == 0) {
  5. continue;
  6. }
  7. iNum++;
  8. }
  9. alert(iNum); //输出 "8"

这里,alert 将显示 "8",即执行循环的次数。可能执行的循环总数为 9,不过当 i 的值为 5 时,将执行 continue 语句,会使循环跳过表达式 iNum++,返回循环开头。

与有标签的语句一起使用

break 语句和 continue 语句都可以与有标签的语句联合使用,返回代码中的特定位置。

通常,当循环内部还有循环时,会这样做,例如:

  1. var iNum = 0;
  2.  
  3. outermost:
  4. for (var i=0; i<10; i++) {
  5. for (var j=0; j<10; j++) {
  6. if (i == 5 && j == 5) {
  7. break outermost;
  8. }
  9. iNum++;
  10. }
  11. }
  12.  
  13. alert(iNum); //输出 "55"

在上面的例子中,标签 outermost 表示的是第一个 for 语句。正常情况下,每个 for 语句执行 10 次代码块,这意味着 iNum++ 正常情况下将被执行 100 次,在执行完成时,iNum 应该等于 100。这里的 break 语句有一个参数,即停止循环后要跳转到的语句的标签。这样 break 语句不止能跳出内部 for 语句(即使用变量 j 的语句),还能跳出外部 for 语句(即使用变量 i 的语句)。因此,iNum 最后的值是 55,因为当 i 和 j 的值都等于 5 时,循环将终止。

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

  1. var iNum = 0;
  2.  
  3. outermost:
  4. for (var i=0; i<10; i++) {
  5. for (var j=0; j<10; j++) {
  6. if (i == 5 && j == 5) {
  7. continue outermost;
  8. }
  9. iNum++;
  10. }
  11. }
  12.  
  13. alert(iNum); //输出 "95"

在上例中,continue 语句会迫使循环继续,不止是内部循环,外部循环也如此。当 j 等于 5 时出现这种情况,意味着内部循环将减少 5 次迭代,致使 iNum 的值为 95。

提示:可以看出,与 break 和 continue 联合使用的有标签语句非常强大,不过过度使用它们会给调试代码带来麻烦。要确保使用的标签具有说明性,同时不要嵌套太多层循环。

提示:想了解什么是有标签语句,请阅读 ECMAScript 标签语句 这一节。