Пока коды, которые мы пишем, работают, в фоновом режиме есть процессы, которые мы не видим. Когда механизм Javascript считывает и выполняет коды, он делает это в 2 этапа. Этот общий процесс, называемый контекстом выполнения, состоит из 2 этапов, как мы уже упоминали, как этап создания и этап выполнения.

На первом этапе, называемом этап создания, JS-движок выполняет некоторую работу по ознакомлению с кодом и подготовке. Создает контекст, выделяет память для хранения переменных и функций. На следующем этапе, который является этапом выполнения, механизм JS присваивает значения, которые мы упомянули, переменным, с которыми он уже знаком, и вызывает функции.

Мы можем сравнить это с приготовлением пищи. С самого начала мы узнаем, какие аксессуары необходимы для еды, которую мы собираемся приготовить (фаза создания).

Затем определяем количество припасов и начинаем действие по приготовлению еды (фаза исполнения).

Когда код выполняется в первый раз, сначала создается глобальный контекст выполнения и выполняются указанные этапы. Затем, если функции существуют и вызываются, создаются функциональные контексты выполнения и выполняются обе фазы.

Мы можем практически увидеть все это с кодом ниже.

  1. Когда этот код считывается движком, сначала создается глобальный контекст.

1.1 — Во время фазы создания, которая является 1-й фазой глобального контекста, в памяти будет выделено место для переменных и функции, а затем им будут присвоены начальные значения, как показано на слева в приведенной выше таблице. На этом этапе также создается глобальный объект, и этот объект равен объекту window (если это веб-браузер) в глобальном контексте создания.
1.2 — Затем фаза выполнения, который является второй фазой глобального контекста. На этом этапе движок уже ознакомится со значениями, которые мы присваиваем переменным, которые он размещает, как показано в таблице справа.

2. Если вы заметили, с переменной tech в функции getTechStack ничего не делалось. Это связано с тем, что переменная находится внутри функции getTechStack. После вызова этой функции, как в строке 9, будет создан новый функциональный контекст, и в этом контексте снова будут выполнены 2 фазы. Только в этом случае переменная tech будет рассматриваться как любая другая переменная.

В отличие от глобального контекста, глобальный объект в функциональном контексте будет эквивалентен объекту arguments, который ссылается на параметры функции.

Таким образом, каждый раз, когда вызывается функция, отличная от глобального контекста, будет создан новый контекст и будет повторяться одна и та же процедура.

Спасибо, что прочитали. :)

Другие темы: