在do-while循环中使用continue

19

MDN文档说明:

当你使用没有标签的 continue 语句时,它会终止最内层包含当前循环的 whiledo-while 或者 for 循环的当前迭代,然后继续执行下一次迭代。

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

do {
  continue;
} while(false);
尽管while条件为false,但我期望它会无限运行,因为continue跳转到块的开头,然后立即再次执行continue等。但不知何故,循环在一次迭代后终止。看起来continue被忽略了。

do-while循环中的continue如何工作?


1
满足条件是隐含的。如果条件不满足,就没有下一次迭代。 - user1106925
1
我错过了。我想我被源代码的顺序误导了。(我以为 continue 总是会在源代码中“跳上去”。) - pimvdb
1
似乎是这样的,特别是如果你使用语句标签。 TOP: do { continue TOP; } while(false) - user1106925
7个回答

13

看看这个 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() );​

看起来它会继续执行,然后跳出该迭代以运行检查条件。由于条件为假,它会终止。


12

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


5

Continue语句会停止执行块中剩下的代码,并直接跳转到您的循环的下一个迭代。

由于您正在使用while(false),因此没有下一个迭代。


5

continue不会重新开始当前迭代,而是跳过到下一个迭代(如MDN-quote中所说)。

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


4

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

continue 不会跳转到块的开头,而是会跳转到块的结尾。


3
在 continue 之后,循环条件会被评估,由于它为假,因此循环将终止。

1

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

如果你将while(false)替换为while(true),你将获得一个无限循环。

do {
  continue;
} while(true);

continue 跳过当前块的剩余部分,在 do-while 循环中,会执行条件语句。

在您的情况下,条件为 false,因此终止循环。如果该条件为 true,则会在循环的开头继续执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接