最近在浏览《JavaScript高等程序设计第3版》的过程当中,看到了label语句的运用,由于之前没运用过,以为有必要进修一下,特此纪录。
label语句是ECMA中定义的语句,因而不存在兼容性的题目,运用label语句是为了给代码增加标签,轻易未来运用,语法以下:
label: statement
//下面是一个示例:
start: for (var i=0; i < count; i++) {
alert(i);
}
label语句可以与break 和 continue 语句团结运用,从而返回代码中特定的位置。这类团结运用的状况多发生在轮回嵌套的状况下:
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
alert(num); //55
在这个例子中,outermost 标签示意外部的 for 语句。假如每一个轮回一般实行 10 次,则 num++ 语句就会一般实行 100次。换句话说,假如两个轮回都天然完毕,num 的值应该是 100。但内部轮回中 的 break语句带了一个参数:要返回到的标签。增加这个标签的效果将致使 break 语句不仅会退出内 部的 for 语句(即运用变量 j的轮回),而且也会退出外部的 for 语句(即运用变量 i 的轮回)。为此, 当变量 i 和 j 都即是 5 时,num 的值正好是55。一样,continue 语句也可以像如许与 label 语句联 用,以下面的例子所示:
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
num++;
}
}
alert(num); //95
在这类状况下,continue 语句会强迫继承实行轮回——退出内部轮回,实行外部轮回。当 j 是 5 时,continue 语句实行,而这也就意味着内部轮回少实行了 5 次,因而 num 的效果是 95。
虽然联用 break、continue 和 label 语句可以实行庞杂的操纵,但假如运用过分,也会给调试 带来贫苦。在此,我们发起假如运用 label 语句,一定要运用描述性的标签,同时不要嵌套过量的轮回。
----泉源《JavaScript高等程序设计第3版》