一页页的看书才发现有label语句这么个东东。书中给出的例子是这样的:
var num = 0;
outermost:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
console.log(num);// 55
var num = 0;
outermost:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
num++;
}
}
console.log(num);// 95
如果我们把标签去掉呢:
var num = 0;
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break;
}
num++;
}
}
console.log(num);// 95
var num = 0;
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
continue;
}
num++;
}
}
console.log(num);// 99
可以看到,只使用break的结果等于使用continue outermost的结果。怎么去理解呢?
这里复杂的地方是嵌套循环,即两层for循环,我们先回忆一下break和continue的基本用法:
1)立即退出循环:这里注意break和continue只能作用于一层,也就是说,在两层嵌套循环时(不使用标签),break和continue不会对外层循环有任何影响。
2)continue是立即退出本次循环:本次循环中,continue语句之后的语句不会再执行。
3)break是退出整个循环:直接执行整个循环之后的语句。
然后可以总结出有标签的用法:
1)立即跳到标签位置
2)continue从标签位置继续执行
3)break跳过打标签的所有语句