break和continue语句

break和continue语句用于在循环中精确地控制代码的执行。其中,break语句会立即退出循环,强制继续执行循环后面的语句。而continue语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行。

举一个简单的例子

var num = 0;

for(var i = 1; i < 10; i ++){
    if(i % 5 === 0){
        break;
    }
  num++;
}
alert(num);  // 4

在循环体内,有一个if语句检查i的值是否可以被5整除(使用求模操作符)。如果是,则执行break语句退出循环。另一方面,变量num从0开始,用于记录循环执行的次数。在执行break语句之后,要执行的下一行代码是alert()函数,结果显示4。break语句的执行,导致了循环在num再次递增之前就退出了。

如果将以上的代码中的break改为continue,则可以看到另一个结果:

var num = 0;

for(var i = 1; i < 10; i ++){
    if(i % 5 === 0){
        continue;
    }
  num++;
}
alert(num);  // 8

当变量i等于5时,循环会在num再次递增之前退出,但接下来执行的是下一次循环,即i的值等于6的循环。于是,循环又继续执行,直到i等于10时自然结束。而num的最终值之所以是8,是因为continue语句导致它少递增了一次。

break和continue语句都可以与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 ++;
  }
}
alert(num);  // 55

在这个例子中,outermost标签表示外部的for语句。break表示立即退出内部循环,不过内部循环中的break语句带了一个参数:要返回到的标签。添加这个标签的结果将导致break语句不仅会退出内部的for语句(即使用变量j的循环),而且也会退出外部的for语句(即使用变量i的循环)。为此,当变量i和j都等于5时,num的值正好是55。

同样,continue语句也可以像这样与label语句联用,如下面的例子所示:

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 ++;
  }
}
alert(num);  // 95

在这种情况下,continue语句会强制继续执行循环——退出内部循环,执行外部循环。当j是5时,continue语句执行,而这也就意味着内部循环少执行了5次,因此num的结果是95。如果没有使用标签,结果应该是99,将会退出循环,并强制继续执行内部循环。

虽然联用break、continue和label语句能够执行复杂的操作,但如果使用过度,也会给调试带来麻烦。在此,我们建议如果使用label语句,一定要使用描述性的标签,同时不要嵌套过多的循环。

你可能感兴趣的:(break和continue语句)