break 和 continue

未匹配的标注

breakcontinuereturn 是类似的,return 是代码返回到调用位置。

循环嵌套中的控制语句

下面示例,共两层循环,外层的称为 ⌈外部循环⌋,内层的称为 ⌈内部循环⌋,ij 的值循环中依次都是 1 2 3 ,总共应循环 9 次。

for (var i = 1; i <= 3; i++) {
    for (var j = 1; j <= 3; j++) {
        console.log({i:i,j:j});
    }
}

我们以 console.log({i:i,j:j}) 方式打印一次循环 i j 的值:

语句

break

现在加上 break 语句,当内部循环到 j 等于 2 时执行 break 语句。

语句

打印如下:

语句

可以看到 j2 时,内部循环被强制退出,继续外层的 for 语句。break 语句的下面 console.log 代码不会执行,内层循环的 j3 也不会执行。

语句

因此,break 可以理解为 ⌈跳出循环⌋ 或 ⌈退出循环⌋ 都可以。

continue

现把 break 换成 continue 语句:

语句

打印如下:

语句

可以看到内部循环到 j2 时执行了指令 ⌈继续内部循环⌋,也就是回到了内部的 for 语句,下方的 console.log 不会执行,看到这里思考下为什么不会执行?如下图箭头所示,代码已回到了 for 语句那里。

语句

continuebreak 的不同之处在于,break 是 ⌈强制退出循环⌋,而 continue 是 ⌈强制继续循环⌋。

返回代码中特定的位置 label 语句

上方例子中的 breakcontinue 都是退出、继续当前的循环,有没有什么办法退出外层的循环?实际上它们后面可以配合 label 标签返回代码特定的位置

outer: for (var i = 1; i <= 3; i++) {
  for (var j = 1; j <= 3; j++) {

    if (j == 2) { break outer; }

    console.log({ i: i, j: j });
  }
}

在外层的 for 语句前面加上 outer: 表示定义一个叫 outer 的标签,然后 break outer 表示返回代码的位置是最外层的 for 语句。
执行如下:

语句

可见当 j2 时,不仅退出了内部循环,也退出了外部循环。同理,把 break 换成 continue 是什么结果?

语句

打印如下:

语句

总结

理解 breakcontinue 其实就是计算机的调度

  1. 执行哪里:返回的代码位置,也就是哪个 for 语句 ⌈文中的三个箭头图片⌋,整篇都在强调这一点,如果你看懂了,就都明白了。
  2. 执行什么:操作是 ⌈退出⌋ 还是 ⌈继续⌋。
  3. 语句后面的代码都不会执行,因为代码已返回到了特定位置。

扩展:PHP 如何跳出嵌套循环

break 和 continue

break 和 continue

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~