Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 18.11.2022, 10:51
Интересующийся
Отправить личное сообщение для logicaface Посмотреть профиль Найти все сообщения от logicaface
 
Регистрация: 17.11.2022
Сообщений: 11

voraa, я их выносил для того, чтобы сделать имитацию моих циклов на while. Мне ведь было интересно почему оно именно на while не работает. И вообще я хотел понять как ведут себя переменные в принципе. Я, выходит просто не до конца понял как работают циклы. Выходит значения циклов присваиваются заного только тогда, когда интерация полностью покидает цикл? J сбрасывается на 2 потому, что continue создает выход из внутреннего цикла а i не сбрасывается всегда на 2 потому, что из внешнего цикла никогда выхода во вне не происходит. Я правильно понял?)
Ответить с цитированием
  #12 (permalink)  
Старый 18.11.2022, 11:07
Интересующийся
Отправить личное сообщение для logicaface Посмотреть профиль Найти все сообщения от logicaface
 
Регистрация: 17.11.2022
Сообщений: 11

voraa, все, я понял.) Спасибо вам большое что разжевали это все.)
Ответить с цитированием
  #13 (permalink)  
Старый 18.11.2022, 11:07
Интересующийся
Отправить личное сообщение для logicaface Посмотреть профиль Найти все сообщения от logicaface
 
Регистрация: 17.11.2022
Сообщений: 11

Спасибо всем большое за помощь. Здорово, что тут такие отзывчивые люди.)
Ответить с цитированием
  #14 (permalink)  
Старый 18.11.2022, 11:13
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

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

можно записать как
i=0;
while (i<10) {
   ....
   i++;
}
Ответить с цитированием
  #15 (permalink)  
Старый 18.11.2022, 11:25
Интересующийся
Отправить личное сообщение для logicaface Посмотреть профиль Найти все сообщения от logicaface
 
Регистрация: 17.11.2022
Сообщений: 11

voraa, я просто еще думал, что в цикле for изменение переменной происходит в самую самую последнюю очередь. Грубо говоря на самой последней. Другими словами я думал что когда срабатывает continue изменение переменной i не происходит, но происходит только после alert(i);
Ответить с цитированием
  #16 (permalink)  
Старый 18.11.2022, 11:25
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

И то, где описана переменная, в цикле или во вне, тоже может иметь значение.
Сравните
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()));
Ответить с цитированием
  #17 (permalink)  
Старый 18.11.2022, 11:39
Интересующийся
Отправить личное сообщение для logicaface Посмотреть профиль Найти все сообщения от logicaface
 
Регистрация: 17.11.2022
Сообщений: 11

voraa, Вот я не понимаю этого. Почему так происходит?
Ответить с цитированием
  #18 (permalink)  
Старый 18.11.2022, 11:43
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от logicaface
Вот я не понимаю этого. Почему так происходит?
Это целую лекцию надо читать, что бы объяснить.
Поизучайте сами, что такое let, чем отличается от var, Особенности let в циклах. Про области видимости и замыкания.
Тут https://learn.javascript.ru/ многое можно найти
Ответить с цитированием
  #19 (permalink)  
Старый 18.11.2022, 11:46
Интересующийся
Отправить личное сообщение для logicaface Посмотреть профиль Найти все сообщения от logicaface
 
Регистрация: 17.11.2022
Сообщений: 11

voraa, спасибо вам большое что так сильно помогли и указали где копать, хочется разобраться а не просто тупо сделать чтобы работало и забыть.
Ответить с цитированием
  #20 (permalink)  
Старый 18.11.2022, 14:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск