Разница в поведении между let и var в цикле for

325
10 сентября 2017, 02:56

Разница в объявлении счетчика цикла через let и var в том что через var переменная-счетчик видна за пределами цикла в функции, через let - только в пределах цикла. Объясните пожалуйста почему в этих случаях разные выводы

for(var i = 0; i < 10; i++) setTimeout(() => console.log(i), 1000)

тут получаем десять десяток.

for(let i = 0; i < 10; i++) setTimeout(() => console.log(i), 1000)

а тут от нуля до десяти.

С первым примером все понятно, а почему во втором так? i ведь создается один раз и прокручивается до начала выполнения первого setInterval до десятки. Одним словом - почему в эти двух примерах разные результаты?

Answer 1

https://learn.javascript.ru/let-const

При использовании в цикле, для каждой итерации создаётся своя переменная.
Переменная var – одна на все итерации цикла и видна даже после цикла.
С переменной let – всё по-другому.
Каждому повторению цикла соответствует своя независимая переменная let. Если внутри цикла есть вложенные объявления функций, то в замыкании каждой будет та переменная, которая была при соответствующей итерации.

READ ALSO
Иконка аватара без потери качества

Иконка аватара без потери качества

Добрый День! Столкнулся с проблемойСуществуют ли способы сохранения качества аватара без потери качества изображения? Проблема заключается...

315
memcached не принимает большие данные

memcached не принимает большие данные

Есть большой json-файл(примерно, 7,5 мегабайт), который подгружается с диска и декодируется примерно 3 секундыЯ захотел это исправить и положить...

305
Резервирование средств на сайте

Резервирование средств на сайте

Допустим, есть пользователь, который ввел денежные средства на сайтИ есть другой пользователь, который получить эти деньги после выполнения...

279