Является ли глобальный контекст выполнения таким же, как глобальный объект в JavaScript? - PullRequest
2 голосов
/ 17 апреля 2020

Насколько я понимаю, каждый раз, когда запускается программа JavaScript, механизм сначала создает контекст выполнения, помещает этот контекст выполнения в стек вызовов / стек выполнения, а затем создает глобальный объект (окно в браузере). и global в Node).

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

Прав ли я, отличая создание глобального контекста выполнения от создания глобального объекта сам? Я рассматриваю их как операции, которые происходят бок о бок, но это не одно и то же.

1 Ответ

1 голос
/ 17 апреля 2020

Да, справедливо сказать, что глобальный контекст и глобальный объект - это отдельные понятия. Одним из иллюстрирующих различий является привязка this: контекст определяет, на что ссылается this (в случае глобального контекста: на глобальный объект); в то время как глобальный объект не имеет свойства с именем "this".

В то же время, глобальный контекст и глобальный объект несколько связаны, поскольку локальные переменные в первом являются свойствами второго.

Обратите внимание, что «контекст выполнения» в основном является абстрактным понятием, что означает, что движок должен вести себя только «как если бы» он делал то, что описывает spe c. Скорее всего, высокопроизводительные движки будут использовать определенные ярлыки (например, оптимизированный код может хранить некоторые локальные переменные в регистрах или в стеке машины, никогда не помещая их в какой-либо контекст).

...