入れ子(ネスト)で多階層にしたwhile文において、複数の階層のループ(繰り返し)を終了させたいときは、breakの引数に、ラベルを指定する。
ラベルを指定しない場合、break文がある階層のループ(繰り返し)だけを終了させる。
構文
ラベル指定あり
break ラベル;
指定したラベルがある階層のひとつ下の階層のループ(繰り返し)を終了させる。指定したラベルがある階層のループ(繰り返し)の次の処理へ移る。ラベルがループ外にある場合は、全階層のループを抜ける。
while ( 条件式A ) {
条件式Aが「TRUE」の間、繰り返し行う処理
ラベル:
while ( 条件式B ) {
条件式Bが「TRUE」の間、繰り返し行う処理
while ( 条件式C ) {
条件式Cが「TRUE」の間、繰り返し行う処理
break ラベル; // 条件式Bの階層までのループ(繰り返し)を終了させ、条件式Aのループ(繰り返し)の次の処理へ移る
}
}
}
条件式Aが「TRUE」の間、繰り返し行う処理
ラベル:
while ( 条件式B ) {
条件式Bが「TRUE」の間、繰り返し行う処理
while ( 条件式C ) {
条件式Cが「TRUE」の間、繰り返し行う処理
break ラベル; // 条件式Bの階層までのループ(繰り返し)を終了させ、条件式Aのループ(繰り返し)の次の処理へ移る
}
}
}
ラベル指定なし
break;
break文がある階層のループ(繰り返し)だけを終了させる。
while ( 条件式A ) {
条件式Aが「TRUE」の間、繰り返し行う処理
while ( 条件式B ) {
条件式Bが「TRUE」の間、繰り返し行う処理
while ( 条件式C ) {
条件式Cが「TRUE」の間、繰り返し行う処理
break; // 条件式Cの階層までのループ(繰り返し)を終了させ、条件式Bのループ(繰り返し)の次の処理へ移る
}
}
}
条件式Aが「TRUE」の間、繰り返し行う処理
while ( 条件式B ) {
条件式Bが「TRUE」の間、繰り返し行う処理
while ( 条件式C ) {
条件式Cが「TRUE」の間、繰り返し行う処理
break; // 条件式Cの階層までのループ(繰り返し)を終了させ、条件式Bのループ(繰り返し)の次の処理へ移る
}
}
}
サンプル
ラベル指定あり
ラベルを指定した場合、ラベルがある階層のひとつ下の階層のループ(繰り返し)を終了させる。
<script type="text/javascript">
var varA = 1;
while ( varA <= 5 ) {
document . write( '<p>varA: ' );
document . write( varA++ );
document . write( '</p>' );
var varB = 1;
labelA:
while ( varB < varA ) {
document . write( '<p> varB: ' );
document . write( varB++ );
document . write( '</p>' );
document . write( '<p> varC: ' );
var varC = 1;
while ( varC < varB ) {
document . write( varC++ + ',' );
if ( varC > 2 ) {
document . write( '</p>' );
break labelA;
}
}
document . write( '</p>' );
}
}
</script>
var varA = 1;
while ( varA <= 5 ) {
document . write( '<p>varA: ' );
document . write( varA++ );
document . write( '</p>' );
var varB = 1;
labelA:
while ( varB < varA ) {
document . write( '<p> varB: ' );
document . write( varB++ );
document . write( '</p>' );
document . write( '<p> varC: ' );
var varC = 1;
while ( varC < varB ) {
document . write( varC++ + ',' );
if ( varC > 2 ) {
document . write( '</p>' );
break labelA;
}
}
document . write( '</p>' );
}
}
</script>
↓↓↓出力結果↓↓↓
ラベル指定なし
ラベルを指定しない場合、break文がある階層のループ(繰り返し)だけを終了させる。
<script type="text/javascript">
var varA = 1;
while ( varA <= 5 ) {
document . write( '<p>varA: ' );
document . write( varA++ );
document . write( '</p>' );
var varB = 1;
while ( varB < varA ) {
document . write( '<p> varB: ' );
document . write( varB++ );
document . write( '</p>' );
document . write( '<p> varC: ' );
var varC = 1;
while ( varC < varB ) {
document . write( varC++ + ',' );
if ( varC > 2 ) {
document . write( '</p>' );
break;
}
}
document . write( '</p>' );
}
}
</script>
var varA = 1;
while ( varA <= 5 ) {
document . write( '<p>varA: ' );
document . write( varA++ );
document . write( '</p>' );
var varB = 1;
while ( varB < varA ) {
document . write( '<p> varB: ' );
document . write( varB++ );
document . write( '</p>' );
document . write( '<p> varC: ' );
var varC = 1;
while ( varC < varB ) {
document . write( varC++ + ',' );
if ( varC > 2 ) {
document . write( '</p>' );
break;
}
}
document . write( '</p>' );
}
}
</script>
↓↓↓出力結果↓↓↓