Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Трагедия новичка: вынос переменных за циклы изменяет работу программы. (https://javascript.ru/forum/misc/84695-tragediya-novichka-vynos-peremennykh-za-cikly-izmenyaet-rabotu-programmy.html)

logicaface 18.11.2022 10:51

voraa, я их выносил для того, чтобы сделать имитацию моих циклов на while. Мне ведь было интересно почему оно именно на while не работает. И вообще я хотел понять как ведут себя переменные в принципе. Я, выходит просто не до конца понял как работают циклы. Выходит значения циклов присваиваются заного только тогда, когда интерация полностью покидает цикл? J сбрасывается на 2 потому, что continue создает выход из внутреннего цикла а i не сбрасывается всегда на 2 потому, что из внешнего цикла никогда выхода во вне не происходит. Я правильно понял?)

logicaface 18.11.2022 11:07

voraa, все, я понял.) Спасибо вам большое что разжевали это все.)

logicaface 18.11.2022 11:07

Спасибо всем большое за помощь. Здорово, что тут такие отзывчивые люди.)

voraa 18.11.2022 11:13

С помощью while можно имитировать, если нет continue.
Потому, что continue в while передает управление на проверку условия, а в for на изменение переменной.
Если нет continue, то
for(i=0; i<n; i++){}

можно записать как
i=0;
while (i<10) {
   ....
   i++;
}

logicaface 18.11.2022 11:25

voraa, я просто еще думал, что в цикле for изменение переменной происходит в самую самую последнюю очередь. Грубо говоря на самой последней. Другими словами я думал что когда срабатывает continue изменение переменной i не происходит, но происходит только после alert(i);

voraa 18.11.2022 11:25

И то, где описана переменная, в цикле или во вне, тоже может иметь значение.
Сравните
const ar = [];
let i;
for (i=0; i<5; i++) ar.push(() => i);
alert (ar.map (f => f()));

и
const ar = [];
for (let i=0; i<5; i++) ar.push(() => i);
alert (ar.map (f => f()));

logicaface 18.11.2022 11:39

voraa, Вот я не понимаю этого. Почему так происходит?

voraa 18.11.2022 11:43

Цитата:

Сообщение от logicaface
Вот я не понимаю этого. Почему так происходит?

Это целую лекцию надо читать, что бы объяснить.
Поизучайте сами, что такое let, чем отличается от var, Особенности let в циклах. Про области видимости и замыкания.
Тут https://learn.javascript.ru/ многое можно найти

logicaface 18.11.2022 11:46

voraa, спасибо вам большое что так сильно помогли и указали где копать, хочется разобраться а не просто тупо сделать чтобы работало и забыть.

ksa 18.11.2022 14:06

Цитата:

Сообщение от logicaface
Почему так происходит?

Потому что с
for (let ...)
каждый раз для "блока" (цикла) создается новая переменная.
Ведь ОВ let и const специально "ориентирована" на блоки.


Часовой пояс GMT +3, время: 23:00.