JavaScript-переменная условия цикла не обновляется - PullRequest
0 голосов
/ 24 октября 2018

Почему не работает следующая логика?

Предупреждение : следующее запускает бесконечный цикл при нажатии кнопки Выполнить фрагмент кода.

var i = 0;
var currentLocation = 1;

while(currentLocation !== 9){
    console.log(currentLocation);
    currentLocation += i;
    i++;
}

Это идет в бесконечный цикл.Но если мы заменим currentLocation += i; на currentLocation++;, он будет работать как задумано.Просто любопытно, почему это происходит.

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

currentLocation начинается с 1.

В цикле:

При первом проходе он добавляет 0 к currentLocation, оставляя его на 1.

На втором проходе это добавляет 1 к currentLocation, делая его 2.

На третьем проходе, это добавляет 2 к currentLocation, делая его 4.

На четвертом проходе, это добавляет 3 к currentLocation, делая его 7.

На пятом проходе это добавляет 4 к currentLocation, делая его 11.

И так далее.

Как вы можете видеть, это всегда !== 9.


. Это тот тип вещей, который лучше всего понять, переходя от выражения кода к оператору в отладчике, встроенном в ваш браузер и / или IDE., наблюдая за значениями переменных по ходу дела.

0 голосов
/ 24 октября 2018

Шаг за шагом.

при запуске

i = 0, currentLocation = 1

при прохождении первой итерации

i = 1, currenttLocation = 1

при прохождении второй итерации

i = 2, currentLocation = 2

на третьем

i = 3, currentLocation = 4

на четвертом

i = 4 currentLocation = 7

на пятом

i = 5 currentLocation = 11

, так как currentLocation никогда не будет точно равен 9, цикл никогда не прервется

0 голосов
/ 24 октября 2018

Это потому, что currentLocation никогда не становится равным 9.

Итерация 1:

i = 0
currentLocation = 1 
1 + 0 = 1 

Итерация 2:

i = 1
currentLocation = 1 
1 + 1 = 2 

Итерация 2:

i = 2
currentLocation = 2 
2 + 2 = 4 

Итерация 3:

i = 3
currentLocation = 4 
3 + 4 = 7

Итерация 4:

i = 4
currentLocation = 7 
7 + 4 = 11 // MORE than 9
...