3

Вот код

for (var i = 0; i < 10; i++) { 
  setTimeout(function () { 
    console.log(i); 
  }, 0); 
}

результатом его выполнения будет 10 раз выведено число 10. Вопрос почему? И тут же следующий вопрос:

for (let i = 0; i < 10; i++) { 
  setTimeout(function () { 
    console.log(i); 
  }, 0); 
}

Почему в этом случае будет поледовательно выведено от 0 до 9? Я немогу понять в чем разница?

Это не дубликат вопроса. Потому что: Я думал что когда передаешь 0 в setTimeout эта функция выволнится немеделенно при каждой итерации. И я так и не понимаю почему в случае с let функция начинает выполняться при каждой итерации а не 10 раз подряд после цикла.

  • эта функция выволнится немеделенно - нет. Функция будет помещена в eventLoop и будет выполнена на следующей его итерации, которая, в свою очередь, не запустится, пока поток выполнения занят текущим синхронным кодом. – vp_arth Mar 31 '17 at 18:28
  • В дубликате нет ответа почему let работает по-другому. Голосую за переоткрытие. Автору: вы можете прочитать про это здесь: https://learn.javascript.ru/let-const . Вкратце: let создает новую переменную в каждой итерации цикла (я не могу оформить это в ответе, тк, нельзя писать ответы к закрытым вопросам). – Crantisz Mar 31 '17 at 18:39
  • @Crantisz, в дубликате, как минимум есть ссылка на описание let – Grundy Mar 31 '17 at 19:06
  • @Grundy и что? Вы прекрасно знаете, что ссылки вместо ответов не приветствуются на SO – Crantisz Mar 31 '17 at 19:16
  • @Crantisz, не приветствуются ответы состоящие только из ссылок. В данном случае - ответ описывает все возможные варианты решения проблемы асинхронных функций в цикле, и в дополнение дает ссылки на более подробную информацию. – Grundy Mar 31 '17 at 19:20
  • @Grundy: этот вариант есть и в этом вопросе. Чего нет, так это объяснения чем он отличается от проблемного. – Crantisz Mar 31 '17 at 19:25
  • Первый коментарий дает ответ на первую часть вопроса - спасибо. Да отличие почему с let работает по другому мне и хотелось бы узнать. Во втром коменте непонятно почему он создает новую переменную на каждой итерации? Ведь тогда она на каждой итерации инициализировалась бы нулем. – greshnikang Mar 31 '17 at 19:32
  • В принципе https://learn.javascript.ru/let-const тут и описано по какой причине лет ведет себя по другому внутри цикла. Спасибо за помощь! Впопрос снят – greshnikang Mar 31 '17 at 19:48

0 Answers0