избитая тема - замыкания в js.
0.
1.var funcs = [];
2.for (var i = 0; i < 3; i++) {
3. funcs[i] = function() {
4. console.log("My value: " + i);
5. };
6.}
7.funcs[1]()
0. Когда скрипт только начинает выполняться, доступно только глобальное лексическое окружение
1. код продолжает выполняться и объявляется новая глобальная переменная funcs
2. Затем у меня есть непонимание.
Хочется написать"Затем идет начало цикла for со своим лексическим окружением(Для цикла у каждой итерации своё отдельное лексическое окружение). " т.к. так написано в самоучителе
https://learn.javascript.ru/closure#bloki-koda-i-tsikly-iife, но то, видимо, работает для let(т.е. Environment Record был бы от каждого нового цикла свой, а внешнее лекс. окр. было было global, так?).
Как я понимаю, этот сейчас цикл создается в global, а значит переменная i сейчас тоже записана в глобальное лексическое окружение(именно поэтому если мы сделаем console.log(i) после цикла, то получим i равным 3. И именно поэтому, на строке 7 мы получаем последнее значение i.
Правильно ли я понял как оно устроено?