Использование continue в цикле do-while

состояния MDN:

Когда вы используете continue без метки, он завершает текущую итерацию самой внутренней охватывающей инструкции while, do-while или for и продолжает выполнение цикла со следующей итерации.

Я не уверен, почему следующий фрагмент кода не работает так, как я ожидал.

do {
  continue;
} while(false);

Несмотря на то, что условие while равно false, я ожидаю, что оно будет выполняться вечно, поскольку continue переходит к началу блока, который немедленно снова выполняет continue и т. д. Однако каким-то образом цикл завершается после одной итерации. Похоже, что continue игнорируется.

Как работает continue в цикле do-while?


person pimvdb    schedule 30.06.2012    source источник
comment
Выполнение условия подразумевается. Если условие не выполняется, следующей итерации не будет.   -  person    schedule 30.06.2012
comment
Я пропустил это. Думаю, меня ввел в заблуждение порядок исходного кода. (Я думал, что continue всегда будет прыгать вверх в исходном коде.)   -  person pimvdb    schedule 30.06.2012
comment
Это действительно так кажется, особенно если вы используете метку оператора. TOP: do { continue TOP; } while(false)   -  person    schedule 30.06.2012


Ответы (7)


Проверьте этот 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() );​

Кажется, он нажимает «Продолжить», а затем прерывает эту итерацию, чтобы выполнить условие проверки. Поскольку условие ложно, оно завершается.

person Kevin McKelvin    schedule 30.06.2012

continue не пропускает проверку while(false), а просто игнорирует остальной код в скобках.

person Graham Wager    schedule 30.06.2012

Продолжить останавливает выполнение остальной части кода в блоке и сразу переходит к следующей итерации вашего цикла.

Поскольку вы делаете while(false), следующей итерации не будет

person Munter    schedule 30.06.2012

continue не начинает текущую итерацию снова, а переходит к следующей (как сказано в цитате MDN).

из-за условия false следующей итерации нет, поэтому весь цикл завершается.

person oezi    schedule 30.06.2012

После продолжения оценивается условие цикла, так как оно ложно, цикл завершится.

person Griffin    schedule 30.06.2012

Я ожидаю, что он будет работать вечно, так как continue переходит к началу блока.

continue переходит не в начало блока, а в конец блока.

person Guffa    schedule 30.06.2012

Используйте while(true), чтобы получить бесконечный цикл.

Если вы замените while(false) на while(true), вы получите бесконечный цикл.

do {
  continue;
} while(true);

continue переходит к концу блока, который в цикле do-while будет выполнять условный оператор.

В вашем случае ваше условие было ложным, и поэтому оно завершает цикл. Если это условие true, оно продолжится в начале цикла.

person Joshua Pinter    schedule 08.06.2020