Когда происходит клик, то i берется из внешнего LexicalEnvironment.
К моменту клика цикл завершился, последнее значение было i=2.
В результате значение всегда равно 2.
С переменной let не так.
Каждому повторению цикла соответствует своя независимая переменная let. Если внутри цикла есть вложенные объявления функций, то в замыкании каждой будет та переменная, которая была при соответствующей итерации.
По всей видимости, потому что если мы используем let, то на каждую итерацию цикла создается отдельный скоуп. По идее, должно работать с var если все это дело обернуть в анонимную функцию, и запустить ее с передачей текущего i в качестве аргумента.
Если с var, то нужно создать анонимную функцию, которая будет брать значение из замыкания, а вот let, как во многих других ЯП, при каждом проходе цикле создаёт свою переменную i, поэтому все корректно выводится
Ответ написан
Комментировать
Комментировать
Оценили как «Нравится»
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.