提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、什么是label语句
label语句是JavaScript的一种语句类型,使用label语句可以在代码中添加标签,以便将来使用。以下是label语句的语法:
label:statement
label语句中定义的标签可以在将来由break或continue语句引用,加标签的语句一般都要与for语句等循环语句配合使用。
二、label语句与break,continue语句联合使用
下面我们将会用一个嵌套循环语句展示label语句与break语句,continue语句联合使用所产生的效果,并分析其中的原理。以下是原始的嵌套循环语句。
var num=0;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
num++;
}
}
console.log(num); //100
毫无疑问对这个原始的嵌套循环语句来说,最终会在控制台将输出100。
1.break语句和continue语句
现在我们给这个嵌套循环语句加上break语句,代码如下:
var num=0;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(i==5&&j==5){
break;
}
num++;
}
}
console.log(num); //95
当程序执行到i=5且j=5时,break语句让程序跳出内循环,执行外循环i的自增语句,也就是说跳过了当i=5,j=5,6,7,8,9的情况,相比与原始的嵌套循环少加了5次,所以结果为95。
然后我们给这个嵌套循环语句加上break语句,代码如下:
var num=0;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(i==5&&j==5){
coninue;
}
num++;
}
}
console.log(num); //99
当程序执行到i=5且j=5时,continue语句让程序跳过了本次循环,执行内循环j的自增语句,也就是说只跳过了当i=5,j=5的情况,相比与原始的嵌套循环只少加了1次,所以结果为99。
2.break语句和label语句联合使用
上面的代码其实很好理解,接下来我们在原来代码的基础上引入label语句,讨论以下label语句的原理。
我们在带有break语句的嵌套循环语句中联合使用label语句。代码如下:
var num=0;
start:
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(i==5&&j==5){
break start;
}
num++;
}
}
console.log(num); //55
label语句的使用其实很简单,上面使用一个标签标记位置,下面在调用这个标签的位置就好啦,但是一定要切记,一定要先标记位置。
当程序执行到i=5且j=5时,break语句就会让程序跳转到标签标记处,也就是说break语句不仅让程序跳出了内循环,也同时跳出了外循环,那么从i=5且j=5之后的循环都不会再进行,那么num的值就是从i=0,j=0执行到i=5,j=5这个过程的求和,也就是55。
那么对于下面的代码:
var num=0;
for(i=0;i<10;i++){
start:
for(j=0;j<10;j++){
if(i==5&&j==5){
break start;
}
num++;
}
}
console.log(num); //95
当我们把label标签放在内循环开始的地方,不难想象,当程序执行到i=5且j=5时,程序只会跳出内循环。其实这个时候和不加label语句的结果是一样的,因为break语句本来就会跳转到现在label语句标记的位置。
2.continue语句和label语句联合使用
接着我们再在带有continue语句的嵌套循环语句中联合使用label语句。代码如下:
var num=0;
start:
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(i==5&&j==5){
continue start;
}
num++;
}
}
console.log(num); //95
当程序执行到i=5且j=5时,continue语句就会让程序跳转到标签标记处,也就是说break语句让程序跳出了整个内循环,也就是跳过了当i=5,j=5,6,7,8,9的情况,相比与原始的嵌套循环少加了5次,所以结果为95。
那么对于下面的代码:
var num=0;
for(i=0;i<10;i++){
start:
for(j=0;j<10;j++){
if(i==5&&j==5){
continue start;
}
num++;
}
}
console.log(num); //95
当我们把label标签放在内循环开始的地方,当程序执行到i=5且j=5时,程序只会跳出当前循环。其实这个时候和不加label语句的结果是一样的,因为continue语句本来就会跳转到现在label语句标记的位置。
总结
联用break,continue语句能够执行复杂的操作,在适当的时候跳出循环,可以减少一些不必要的运算,从而让程序的更快的得到结果。但是如果label语句使用过渡也会给调试带来麻烦。所以,建议使用描述性标签,同时不要嵌套过多的循环。