1.标签

    1. function bar(){
    2. ...
    3. }
    4. {
    5. foo:bar()
    6. }

    上述的代码没有任何问题,foo就是bar()的标签(可以理解为名字,标识等)

    1. 可以通过标签实现类似goto的功能(javascript不支持goto语句)
    1. //标签为foo的循环
    2. foo:for(var i=0;i<4;i++){
    3. for(var j=0;j<4;j++){
    4. //如果i和j相等,继续外层循环
    5. if(j===i){
    6. //跳转到foo的下一个循环
    7. continue foo;
    8. }
    9. //跳过奇数结果
    10. if((j*i)%2===1){
    11. //继续内层循环(没有标签的)
    12. continue;
    13. }
    14. }
    15. console.log('i',i,'j',j);
    16. }
    • continue foo并不是跳转到foo所在的标签处继续执行,而是执行foo循环的下一轮循环
    1. 带标签的循环的更大的一个好处在于,和break,一起使用可以实现从内层的循环跳转到外层的循环
    1. //标签为foo的循环
    2. foo:for(var i=0;i<4;i++){
    3. for(var j=0;j<4;j++){
    4. //跳过奇数结果
    5. if((j*i)>=3){
    6. console.log('stopping',i,j);
    7. break foo;
    8. }
    9. }
    10. console.log('i',i,'j',j);
    11. }
    • break foo并不是跳转到foo所在的标签处继续执行,而是跳出标签foo所在的循环/代码块,继续执行后面的代码
    1. 标签也可用于非循环代码块,但是只有break才可以.我们可以对带标签的代码块使用break,但是不能对非循环的代码块使用continue,也不能对不带标签的代码块使用break;