js|labelは何ですか?サイクルの中で何の効果がありますか?

2894 ワード

「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は5回+の数が少なくなりました.出力は95です.
contineに参加する: 
 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であるときに、ダブルサイクルを抜け出して、out Point層に戻り、ループ以外の次の動作を継続して実行し、出力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であるときに、ダブルサイクルを抜け出して、out Point層に戻って、未終了サイクルを継続して実行する.すなわち、i=6から、numは5回+++だけスキップした.
 
labelを使いすぎないように注意してください.デバッグに迷惑をかけます.説明性のあるタグを使うと同時に、入れ子が多すぎないようにしてください.