日期:2014-05-16 浏览次数:20496 次
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 */