1.标签
function bar(){
...
}
{
foo:bar()
}
上述的代码没有任何问题,foo就是bar()的标签(可以理解为名字,标识等)
- 可以通过标签实现类似goto的功能(javascript不支持goto语句)
//标签为foo的循环
foo:for(var i=0;i<4;i++){
for(var j=0;j<4;j++){
//如果i和j相等,继续外层循环
if(j===i){
//跳转到foo的下一个循环
continue foo;
}
//跳过奇数结果
if((j*i)%2===1){
//继续内层循环(没有标签的)
continue;
}
}
console.log('i',i,'j',j);
}
- continue foo并不是跳转到foo所在的标签处继续执行,而是执行foo循环的下一轮循环
- 带标签的循环的更大的一个好处在于,和break,一起使用可以实现从内层的循环跳转到外层的循环
//标签为foo的循环
foo:for(var i=0;i<4;i++){
for(var j=0;j<4;j++){
//跳过奇数结果
if((j*i)>=3){
console.log('stopping',i,j);
break foo;
}
}
console.log('i',i,'j',j);
}
- break foo并不是跳转到foo所在的标签处继续执行,而是跳出标签foo所在的循环/代码块,继续执行后面的代码
- 标签也可用于非循环代码块,但是只有break才可以.我们可以对带标签的代码块使用break,但是不能对非循环的代码块使用continue,也不能对不带标签的代码块使用break;