Javascript break 和 continue 语句与有标签的语句一起使用,该如何处理
Javascript break 和 continue 语句与有标签的语句一起使用
1. var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
for (var j=0; j<10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
iNum++;
}
}
alert(iNum);
2. var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
for (var j=0; j<10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
iNum++;
}
}
alert(iNum);
请教大虾这两段代码中的iNum分别是多少 并请详细解说怎么得到的!非常感谢!!!
------解决思路----------------------
iNum的值你自己运行一下代码就知道。break、continue很好理解的,break是立即终止循环代码的执行,continue只是终止本次循环。
文字描述能力有限,还是通过代码来解释,你自己执行下面这段代码观察一下应该就能理解了。
break应该不用多说了,观察continue的执行:
------解决思路----------------------
break后会跳出循环,但continue只会终止本次循环的操作,进入下一次循环
------解决思路----------------------
break,continue与标签一起使用和没与标签一起使用,逻辑上基本一致,只是跳出循环时的循环体变为了标签所指向的循环体。
1. var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
for (var j=0; j<10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
iNum++;
}
}
alert(iNum);
2. var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
for (var j=0; j<10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
iNum++;
}
}
alert(iNum);
请教大虾这两段代码中的iNum分别是多少 并请详细解说怎么得到的!非常感谢!!!
------解决思路----------------------
iNum的值你自己运行一下代码就知道。break、continue很好理解的,break是立即终止循环代码的执行,continue只是终止本次循环。
文字描述能力有限,还是通过代码来解释,你自己执行下面这段代码观察一下应该就能理解了。
break应该不用多说了,观察continue的执行:
var iNum = 0;
var output = '';
outermost: for (var i = 0; i < 5; i++) {
for (var j = 0; j < 5; j++) {
if (i == 1 && j == 2) {
continue outermost;
}
iNum++;
output += 'i=' + i + 'j=' + j + '<br />';
}
}
document.write('iNum=' + iNum + '<br />' + output);
/*
iNum=22
i=0 j=0
i=0 j=1
i=0 j=2
i=0 j=3
i=0 j=4
i=1 j=0
i=1 j=1 //看这里,执行到下一次循环时满足continue条件(i = 1 && j = 2),由于标签语句是写在外层for循环处,continue语句立即终止本次循环并跳转到标签语句标注的代码处继续执行(即外层的for循环),如果你把标签语句写到内层for语句处,就会发现continue只是跳出了本次内层循环,然后继续下一次内层的for循环(i = 1 j = 3、 i = 1 j = 4...)
i=2 j=0
i=2 j=1
i=2 j=2
i=2 j=3
i=2 j=4
i=3 j=0
i=3 j=1
i=3 j=2
i=3 j=3
i=3 j=4
i=4 j=0
i=4 j=1
i=4 j=2
i=4 j=3
i=4 j=4
*/
------解决思路----------------------
break后会跳出循环,但continue只会终止本次循环的操作,进入下一次循环
------解决思路----------------------
break,continue与标签一起使用和没与标签一起使用,逻辑上基本一致,只是跳出循环时的循环体变为了标签所指向的循环体。
var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
for (var j=0; j<10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
iNum++;
}
}
alert(iNum);
/**
*
第一段代码,
当i==5 && j==4时iNum=5*10+5*1,
当i==5 && i==5时,跳出outermost循环,即最外层循环体,整个循环结束,iNum++没执行,
所以iNum=5*10+5*1=55;
其中5*10为i从0到4,内层循环共执行了5次,iNum++共执行了50次,
5*1为i==5时,j从0到4,iNum++共执行了5次,到j==5时,跳出了整个循环。
*/
iNum = 0;
outermost:
for (var i=0; i<10; i++) {
for (var j=0; j<10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
iNum++;
}
}
alert(iNum);
/**
*
第二段代码,
当i==5 && j==4时,iNum=5*10+5*1,
当i==5 && i==5时,跳出outermost循环的本次循环,即跳出i==5时的最外层循环,然后继续从i=6开始,iNum++再继续执行,直到i==10(即1<10不成立),
所以iNum=5*10+5*1+(9-5)*10=95,
其中 5*10为i从0到4期间,j从0到9共执行了5次,iNum++共执行了50次
5*1表示i==5时,j从0到4共执行了5次,iNum++执行了5次
当i==5 && j==5是,跳出最外层的本次循环,即跳出i==5时的最外层循环,然后从i==6开始继续循环
(9-5)*10表示i从6到9(6,7,8,9)期间,j从0到9共执行了4次,iNum++共执行了40次
第二段代码还可以理解为,当i==5 && j==5时,内层循环退出,即内层循环少执行了5次,所以iNum=100-5=95
*/