js | label是什么,在循环中有什么用

在看《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会给调试带来麻烦,使用时要有描述性的标签,也同时不要嵌套过多的循环。

猜你喜欢

转载自blog.csdn.net/R_banyan0820/article/details/81262355