break 和 continue
break
和 continue
和 return
是类似的,return
是代码返回到调用位置。
循环嵌套中的控制语句
下面示例,共两层循环,外层的称为 ⌈外部循环⌋,内层的称为 ⌈内部循环⌋,i
和 j
的值循环中依次都是 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
语句。
打印如下:
可以看到 j
为 2
时,内部循环被强制退出,继续外层的 for
语句。break
语句的下面 console.log
代码不会执行,内层循环的 j
为 3
也不会执行。
因此,break
可以理解为 ⌈跳出循环⌋ 或 ⌈退出循环⌋ 都可以。
continue
现把 break
换成 continue
语句:
打印如下:
可以看到内部循环到 j
为 2
时执行了指令 ⌈继续内部循环⌋,也就是回到了内部的 for
语句,下方的 console.log
不会执行,看到这里思考下为什么不会执行?如下图箭头所示,代码已回到了 for
语句那里。
continue
和 break
的不同之处在于,break
是 ⌈强制退出循环⌋,而 continue
是 ⌈强制继续循环⌋。
返回代码中特定的位置 label 语句
上方例子中的 break
和 continue
都是退出、继续当前的循环,有没有什么办法退出外层的循环?实际上它们后面可以配合 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
语句。
执行如下:
可见当 j
为 2
时,不仅退出了内部循环,也退出了外部循环。同理,把 break
换成 continue
是什么结果?
打印如下:
总结
理解 break
和 continue
其实就是计算机的调度
- 执行哪里:返回的代码位置,也就是哪个
for
语句 ⌈文中的三个箭头图片⌋,整篇都在强调这一点,如果你看懂了,就都明白了。 - 执行什么:操作是 ⌈退出⌋ 还是 ⌈继续⌋。
- 语句后面的代码都不会执行,因为代码已返回到了特定位置。
推荐文章: