在看《JavaScript高级程序设计》第三版的第三章时发现label语句,在平常学习js基本没有遇见,经过学习和练习,label与break、continue结合可以节省一些步骤,废话不多说直接上码。
先来一个正常的for循环:
var num = 0;
for (var i = 0 ; i < 10 ; i++){
for (var j = 0 ; j < 10 ; j++){
num++;
}
}
alert(num); // 100
经过双层循环后,num为100,这里应该没有什么问题
加入break:
var num = 0;
for (var i = 0 ; i < 10 ; i++){
console.log("i="+i)
for (var j = 0 ; j < 10 ; j++){
console.log("j="+j)
if( i == 5 && j == 5 ){
console.log("i,j=5")
break;
}
num++;//95
}
}
console.log(num);
循环在 i 为5,j 为5的时候跳出 j循环,但会继续执行 i 循环,所以num少了五次++的数,输出 95
加入continue:
var num = 0;
for (var i = 0 ; i < 10 ; i++){
console.log("i="+i)
for (var j = 0 ; j < 10 ; j++){
console.log("j="+j)
if( i == 5 && j == 5 ){
console.log("i,j=5")
continue;
}
num++;//99
}
}
console.log(num);
输出为99,在i=5,j=5时跳过,但是继续j=6的操作,所以num只缺少一次++
上面两个例子说明了正常情况下加入break和continue,两种不同的跳出循环。而label在代码中添加标签,与break和continue联合使用,从而返回代码中特定的位置。
在带break的语句中加入label:
var num = 0;
outPoint://这里为label,标签名为outPoint
for (var i = 0 ; i < 10 ; i++){
console.log("i="+i)
for (var j = 0 ; j < 10 ; j++){
console.log("j="+j)
if( i == 5 && j == 5 ){
console.log("i,j=5")
console.log(num)
break outPoint;
}
num++;//55
}
}
console.log(num);
循环在 i 为5,j 为5的时候跳出双循环,返回到outPoint层继续执行除循环外的接下来的操作,输出 55
在带continue的语句中加入label
var num = 0;
outPoint:
for (var i = 0 ; i < 10 ; i++){
console.log("i="+i)
for (var j = 0 ; j < 10 ; j++){
console.log("j="+j)
if( i == 5 && j == 5 ){
console.log("i,j=5")
console.log(num)
continue outPoint;
}
num++;//95
}
}
输出95,循环在 i 为5,j 为5的时候跳出双循环,返回到outPoint层继续执行未结束的循环,即从i=6开始,num只跳过了五次++
需要注意的不要过度使用label会给调试带来麻烦,使用时要有描述性的标签,也同时不要嵌套过多的循环。