Обратите внимание, мне неясно, хотите ли вы, чтобы он печатался 10 раз, либо 0
или 10
не могут быть включены. Если вы хотите напечатать 0
.. 10
, это на самом деле будет 11 раз. Поэтому отрегулируйте приведенные ниже примеры соответствующим образом.
Обратите внимание, что при устранении неполадок полезно напечатать значение i
, как я это делал в приведенных ниже примерах. Когда программа работает должным образом, вы можете удалить i
из вашего console.log
до того, как вы окончательно отправите ее.
Я также распечатываю окончательное значение i
при выходе из l oop .
Это хорошая точка сравнения для понимания того, как циклы и приращение значений работают в каждом случае. Также полезно знать, как эти циклы оставляют переменные, к которым можно обращаться позже в программе, и служат для сравнения с напечатанными значениями.
В первых двух примерах не используется отдельная функция только для приращения, поскольку само приращение является функцией и встроено в язык. В нем также показано, как два варианта, которые язык предоставляет для инкремента, могут использоваться полезными способами для управления условиями конечной точки, такими как это.
Во всех случаях я последовательно использовал i < num
, поэтому сравнения удерживайте.
В зависимости от ваших требований это также может быть i < num+1
(эквивалент i <= num
) или i < num-1
. Регулировка этого значения увеличит или уменьшит последнее / наибольшее значение i
, которое печатается (и значение i
имеет после окончания l oop).
++i
печатает 10 раз: когда i
равно 0
.. 9
.
i === 10
, когда l oop заканчивается.
(использование i <= num
приведет к печати 0
.. 10
и выход со значением 11
)
function doWhileLoop(num) {
let i = 0;
do {
console.log(i, "I run once regardless. ");
}
while (++i < num);
console.log("Final value of i:", i);
}
doWhileLoop(10);
Для сравнения, эта версия
i++
печатает 11 раз: когда i
равно 0
.. 10
.
i === 11
, когда l oop заканчивается.
(использование i < num+1
выдаст 0
.. 9
и завершится со значением 10
)
function doWhileLoop(num) {
let i = 0;
do {
console.log(i, "I run once regardless. ");
}
while (i++ < num);
console.log("Final value of i:", i);
}
doWhileLoop(10);
Разница между ++i
и i++
заключается в том, что:
++i
приращения i
сначала , затем используются новые значение, определяющее, следует ли снова запускать l oop или нет.
i++
определяет, следует ли сначала запускать l oop сначала, на основании значения, которое i
уже имеет (и напечатало), затем после этого он увеличивается i
, но перед тем, как снова запустить l oop (или до его выхода, если l oop больше не будет запускаться).
В вашем коде incrementVariable()
действует точно так же, как my ++i
, как в примере выше, потому что вызов функции incrementVariable()
выполняется до выполняется сравнение while
.
Другим решением будет использование if
- then
для ограничения вашего оператора печати.
Эта версия печатает 10 раз: когда i
равно 0
.. 9
.
i === 10
, когда l oop выходит.
(В этом сценарии вы можете контролировать конечное значение l oop, а количество раз, которое запускается l oop, независимо от напечатанных значений.)
function doWhileLoop(num) {
var i = 0;
function incrementVariable() {
i++
return i;
}
do {
if (i < num) {
console.log(i, "I run once regardless.");
}
}
while (incrementVariable() < num);
console.log("Final value of i:", i);
}
doWhileLoop(10);