search

Home  >  Q&A  >  body text

ecmascript - javascript中label:{}这种写法常用吗?

jsvar x, y;

outer: for (x = 0; x < 10; ++x) {
    for (y = 0; y < 10; ++y) {
       if (checkSomething(x, y)) {
           break outer;
       }
    }
}
PHPzPHPz2902 days ago384

reply all(2)I'll reply

  • 阿神

    阿神2017-04-10 15:05:40

    看样子 javascript 的这个语法和 java 差不多,可以参考下《带标签的 break 和 continue (java)》。

    不过最好还是不要用标签,通过其它办法来实现你所需要的,比如拆分函数

    javascriptfunction inner(x) {
        for (y = 0; y < 10; ++y) {
           if (checkSomething(x, y)) {
               return true
           }
        }
        return false
    }
    
    for (x = 0; x < 10; ++x) {
        if (inner(x)) {
            break
        }
    }
    

    如果嵌套代码比较复杂,可以采用 throw

    javascriptfunction inner(x) {
        for (y = 0; y < 10; ++y) {
           if (checkSomething(x, y)) {
               throw "done"
           }
        }
    }
    
    try {
        for (x = 0; x < 10; ++x) {
            inner(x)
        }
    } catch (e) {
        if (e !== "done") {
            throw e
        }
    }
    

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 15:05:40

    不常用。但是在处理嵌套循环的时候这个东西还是蛮方便的。

    reply
    0
  • Cancelreply