【问题标题】:Question about loops and continue关于循环和继续的问题
【发布时间】:2010-02-10 16:48:40
【问题描述】:

那么这实际上是将循环命名为nextLoop 吗?那么当它说continue nextLoop时,它会立即回到顶部吗?

   var total = 0;
        nextLoop:
        for ( var i = 0; i < 7; ++i ) {
            for ( var j = 0; j < 6 ; ++j ) {
                if ( i < 5 )
                continue nextLoop;
                total++;
                }
            total++;
        }
    total++;
    document.write( total );

编辑:

这是命名循环nextLoop:吗?如果是这样,你还能说出什么名字?任何关于为什么命名东西有用的参考资料?

【问题讨论】:

  • 我从来不知道如何回答这样的问题。答案是“是的,你完全正确”,但这似乎不值得发帖。
  • 更新了我的答案以回答您的编辑。

标签: javascript loops


【解决方案1】:

是的。当你有一个循环嵌套在另一个循环中并且你想继续 outer 循环时,这很有用。 Here's a page on MDC 关于它。因此,在您的情况下,在i = 2 循环期间,如果在j 循环中,您说continue nextLoop,它将跳出j 循环,执行i 增量,然后继续@ 987654328@.

continue 与标签一起使用通常不是好习惯;它可以指示逻辑需要重构。但它在语法上是完全有效的,我希望有人会在他们认为绝对必要的情况下加入示例。

编辑 回答您的编辑,循环的标签(名称)是 nextLoop(不带冒号):您可以标记语句,然后将这些标签用作 continue 的目标,然后break。详情请查看the spec。典型的用途是像在你的例子中那样标记循环和continuebreak 它们,但请注意break 也适用于嵌套的switch 语句 - 您可以将它们标记为循环并中断到外部语句从一个内在的案例中。你甚至可以混合它们,这样你就可以从一个开关中中断一个循环(标签命名空间对两者都是通用的)。

【讨论】:

  • 我认为无论如何你都可以不用它。
  • 感谢您对它为何有用的有用参考!
【解决方案2】:

确实如此。但是你应该避免它。这是一种不好的做法,类似于go to。使代码难以阅读、理解和意大利面条式。

【讨论】:

    【解决方案3】:

    是的,这是预期的行为。看看here

    【讨论】:

      【解决方案4】:

      其他语言可以让您跳出选定数量的内部循环, if(!x)break 2;将在两步后继续该过程。

      我见过带有多个循环标签的复杂循环, 并继续调用特定标签,但我同意它会混淆逻辑。

      您几乎总是可以通过编写不使用 continue 来提高循环的效率:

      var total= 0;
      nextLoop: 
      for (var i = 0; i < 7; ++i ){
          for (var j = 0; j < 6 ; ++j ){
              if(i>4) total++;
          }
          total++;
      }
      
      total++; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        • 2022-01-01
        • 1970-01-01
        • 2022-12-28
        • 2014-05-21
        相关资源
        最近更新 更多