Почему цикл не останавливается в определенной точке остановки? - PullRequest
0 голосов
/ 09 ноября 2018

Я работаю над викториной для онлайн-курса, проверяя понимание циклов. Проблема:

"Напишите функцию смехом (), которая принимает один параметр, num, представляющий число возвращаемых" га ". Так, что console.log(laugh(3)); печатает "hahaha!"" Я решил это, используя следующий цикл:

function laugh(num) {
  var string = ""
  for (var i = 0; i < num; i++) {
    string = string + "ha";
  }
  return string + "!";
}
console.log(laugh(3));

Но из любопытства я увеличил num и получил цикл возврата i вместо строки:

function laugh(num) {
  var string = "";
  for (var i = 0; i < num; i++) {
    string = string + "ha";
  }
  return i;
}

console.log(laugh(16))

Это напечатано 16. Теперь я запутался - не должен i достигать только 15, поскольку одно из условий цикла состоит в том, что i < num и num установлены в 16?

Ответы [ 4 ]

0 голосов
/ 09 ноября 2018

Видите, вы начинаете я в 0. Пройдите шаг за шагом. Это выполнится для i = 0,1,2,3 ... 15. Но теперь вы видите, что цикл выполняется для 0 . Таким образом, для любого цикла вида (int i = 0; i

0 голосов
/ 09 ноября 2018

В цикле for сначала выполняется инкремент после проверки этого условия. Поэтому, когда «i» увеличивается до 15, он проверяет 15 <16, true, поэтому продолжайте с остальной частью кода. После этого «i» увеличивается до 16 и проверяет 16 <16, поэтому из цикла получено значение false. </p>

Итак, если вы напечатаете «i», то будет напечатано текущее значение «i», равное 16

0 голосов
/ 09 ноября 2018

Значение i начинается с 0, затем проверяется, не меньше ли оно 16, и, наконец, увеличивается на 1. На последней итерации i равно 15, что удовлетворяет условию быть меньше 15, а затем он увеличивается. Теперь i равно 16, что не меньше 16, поэтому цикл for завершается с i, равным 16.

0 голосов
/ 09 ноября 2018

Условие выхода из цикла равно i < num, поэтому, когда i> = 16, код string = string + "ha"; не выполняется

...