# 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 标签语句 这一节。