Комментарии 7
«Глобальный контекст выполнения ...» чуть-чуть будет путает новых разработчиков, ибо как описано ниже глобальный контекст выполнения (window) в ES6 не подвязывается к this. Статья на 5.
Не нашёл, где в статье такое описано ниже, так что неточность у вас: this не привязывается к глобалу в strict mode, который появился в ES5 (а не в ES6). И вопрос этот относится именно к работе strict mode, которого вполне может не быть в скриптах, написанных с использованием стандарта ES6.
«В других случаях this привязывается к глобальному объекту или устанавливается в undefined (в строгом режиме)»
В большинстве случаев используют строгий режим когда используют ES6 ибо «в строгом режиме зарезервирован для использования следующий список ключевых слов: implements, interface, let, package, private, protected, public, static и yield. В строгом режиме, следовательно, вы не можете задействовать эти слова для именования или обращения к переменным или аргументам.» (MDN)
В ES6 существует одно различие между компонентами LexicalEnvironment и VariableEnvironment. Оно заключается в том, что первое используется для хранения объявлений функций и переменных, объявленных с помощью ключевых слов let и const, а второе — только для хранения привязок переменных, объявленных с использованием ключевого слова var.
Тут неточность, function declaration работает аналогично var а не let и const, то есть всплывает на верх лексического окружения функции (даже если объявлено в блоке), что в терминах статьи соответствует VariableEnvironment (на самом деле такого нет)
Существует два типа лексических окружений:
Начиная с ES6 — существует три типа окружений, не хватает еще блочного (оно используется для let и const в блоках)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Контекст выполнения и стек вызовов в JavaScript