【问题标题】:Using continue in a do-while loop在 do-while 循环中使用 continue
【发布时间】:2012-07-01 17:29:01
【问题描述】:

MDN states:

当您使用不带标签的continue 时,它会终止最里面的whiledo-whilefor 语句的当前迭代,并在下一次迭代中继续执行循环。

我不确定为什么下面的代码不能按我预期的那样工作。

do {
  continue;
} while(false);

即使while 条件是false,我希望它永远运行,因为continue 跳转到块的开头,它立即再次执行continue,等等。然而,不知何故,循环在之后终止一次迭代。看起来continue 被忽略了。

continuedo-while 循环中如何工作?

【问题讨论】:

  • 隐含满足的条件。如果条件不满足,则没有下一次迭代。
  • 我错过了。我想我被源代码的顺序误导了。 (我以为continue 总是会在源代码中“跳起来”。)
  • 确实看起来是这样,尤其是如果您使用声明标签。 TOP: do { continue TOP; } while(false)

标签: javascript loops iteration do-while continue


【解决方案1】:

在 continue 之后,循环条件被评估,因为它是 false,循环将终止。

【讨论】:

    【解决方案2】:

    Continue 停止执行块中的其余代码并直接跳转到循环的下一次迭代。

    因为你在做while(false),所以没有下一次迭代

    【讨论】:

      【解决方案3】:

      continue 不会跳过检查while(false),而只是忽略括号内的其余代码。

      【讨论】:

        【解决方案4】:

        continue 不会再次从当前迭代开始,而是跳到下一个迭代(如 MDN 引用中所述)。

        由于false 条件,没有下一次迭代 - 所以整个循环完成。

        【讨论】:

          【解决方案5】:

          查看这个 jsFiddle:http://jsfiddle.net/YdpJ2/3/

          var getFalse = function() {
            alert("Called getFalse!");
            return false;
          };
          
          do {
            continue;
            alert("Past the continue? That's impossible.");
          } while( getFalse() );​
          

          它似乎达到了继续,然后退出该迭代以运行检查条件。由于条件为假,因此终止。

          【讨论】:

            【解决方案6】:

            我希望它永远运行,因为 continue 跳转到开始 块

            continue 不会跳转到块的开头,它会跳转到块的末尾。

            【讨论】:

              【解决方案7】:

              使用while(true) 获得无限循环。

              如果将while(false) 替换为while(true),则会出现无限循环。

              do {
                continue;
              } while(true);
              

              continue 跳到块的末尾,在 do-while 循环中,将执行条件语句。

              在您的情况下,您的条件为假,因此它终止了循环。如果条件是true,它将在循环开始处继续。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-07-18
                • 2016-03-27
                • 1970-01-01
                • 2013-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多