日期:2014-05-16  浏览次数:20475 次

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的执行:
JScript code
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与标签一起使用和没与标签一起使用,逻辑上基本一致,只是跳出循环时的循环体变为了标签所指向的循环体。
JScript code

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
 */