будет создан [LexicalEnvironment] который НЕ будет содержать переменную i, так как с помощью var она создастся глобально, но [LexicalEnvironment] будет ссылатся на глобальное окружение где и хранится i. И получается к моменту вызова console.log - переменная не будет найдена в локальном [LexicalEnvironment], а будет найдена по ссылке в глобальном [LexicalEnvironment] - а там она уже равна 2. А если я буду использовать let вместо var, то i ,будет попадать в локальный [LexicalEnvironment] и колбек будет замыкаться на ней. ???
Да, твой цикл с var это можно сказать тоже самое, что и let i; for(i = 0; .....
в for лупе лучше всегда let использовать, чтобы избежать клоунады
какие сложные слова
По твоей логике, let ведь к тому моменту тоже будет макс значение иметь, но в этом случае он помнит что тут 0 и тут 1
а так все правильно написал
ну если тебе важно прям разобраться погугли ecmascript спецификацию, там это все дотошно расписывают))
Директива let позволяет объявить локальную переменную с областью видимости, ограниченной текущим блоком кода . В отличие от ключевого слова var, которое объявляет переменную глобально или локально во всей функции, независимо от области блока. из описания директивы let, мозила чо-то там
Мне например интересно, что под капотом происходит.
а вот ты попробуй в for не написать let , а так for(i=0...), как будет себя вести i: как let или var? Вести она себя будет как VAR
Потому что это равносильно window.i = 0, т.е. будет глобальный [LexicalEnvironment]
Обсуждают сегодня