Насколько я понимаю, каждый раз, когда запускается программа JavaScript, механизм сначала создает контекст выполнения, помещает этот контекст выполнения в стек вызовов / стек выполнения, а затем создает глобальный объект (окно в браузере). и global в Node).
Для создания контекста выполнения механизм сначала проходит фазу создания, где он выделяет пространство в памяти для целых определений функций и объявлений переменных (подъем). Он поддерживает ссылку на внешнюю область (это создает цепочку областей действия, но в глобальном контексте выполнения над ней ничего нет), а также создает свойство this
в контексте выполнения и устанавливает его для объекта окна. в браузере и module.exports в узле. Наконец, механизм затем проходит фазу выполнения, где он выполняет код построчно и присваивает значение каждой переменной.
Прав ли я, отличая создание глобального контекста выполнения от создания глобального объекта сам? Я рассматриваю их как операции, которые происходят бок о бок, но это не одно и то же.