What is the use case for “break Identifier” in JavaScript?

后端 未结 2 640
渐次进展
渐次进展 2021-01-18 18:21

the spec goes

BreakStatement :   
    break ;
    break [no LineTerminator here] Identifier ;

then it goes

相关标签:
2条回答
  • 2021-01-18 18:59

    A label is something like this:

    // ...
    mylabel:
    // ...
    

    This can be placed anywhere as a statement.

    It is useful to break/continue when having multiple nested for loops.

    An example of its usage:

    var i, j;
    
    loop1:
    for (i = 0; i < 3; i++) {      //The first for statement is labeled "loop1"
       loop2:
       for (j = 0; j < 3; j++) {   //The second for statement is labeled "loop2"
          if (i === 1 && j === 1) {
             continue loop1;
          }
          console.log("i = " + i + ", j = " + j);
       }
    }
    
    // Output is:
    //   "i = 0, j = 0"
    //   "i = 0, j = 1"
    //   "i = 0, j = 2"
    //   "i = 1, j = 0"
    //   "i = 2, j = 0"
    //   "i = 2, j = 1"
    //   "i = 2, j = 2"
    // Notice how it skips both "i = 1, j = 1" and "i = 1, j = 2"
    

    Source.

    0 讨论(0)
  • 2021-01-18 18:59

    If you look on MDN, there's examples

    outer_block: {
        inner_block: {
            console.log('1');
            break outer_block; // breaks out of both inner_block and outer_block
            console.log(':-('); // skipped
        }
        console.log('2'); // skipped
    }
    

    as you can see, you can break with an identifier that selects a label higher up in the chain than just the first immediate parent statement.

    The default action without an identifier would be

    outer_block: {
        inner_block: {
            console.log('1');
            break; // breaks out of the inner_block only
            console.log(':-('); // skipped
        }
        console.log('2'); // still executed, does not break
    }
    

    The break has to be inside the label, you can't break labels based on indentifiers that the break is outside of.

    0 讨论(0)
提交回复
热议问题