Да, вы поняли меня правильно. Всякий раз, когда вы запускаете код JavaScript, создается контекст выполнения, и все, что у вас есть в вашем коде, выполняется внутри него. Итак, на пути к лучшему пониманию JavaScript мы находимся на правильном пути, так как собираемся углубиться в основы.
Теперь давайте предположим, что контекст выполнения представляет собой большую коробку или контейнер с двумя компонентами внутри, в котором выполняется наш код. Два компонента: theMemory Component
и theCode Component
.
Все переменные и функции хранятся в паре ключ-значение в компоненте памяти. Компонент памяти также упоминается как Variable Environment
.
Выполнение кода происходит внутри компонента кода, также известного как Thread of Execution
.
Как мы все знаем, JavaScript — это синхронный однопоточный язык. Код запускается с использованием только одного потока за раз и следует определенному порядку.
Позвольте мне проиллюстрировать это примером. Рассмотрим следующий код.
Когда мы запускаем этот код, контекст выполнения создается в два этапа. На первом этапе, известном как Memory Creation Phase
, JavaScript выделяет память для всех переменных и функций в коде.
Вот как это выглядит. На этапе создания памяти JavaScript сканирует всю программу построчно. Для переменных он присваивает специальное значение undefined
, а для функций копирует весь код и сохраняет его.
На более позднем этапе, называемом Code Execution Phase
, JavaScript снова запускает всю программу. Встречая строку 1, var x = 2;
заменяет undefined
на 2 в компоненте памяти. Между строками 2 и 5 делать нечего. В строке 6 var square2 = square(x);
при вызове функции создается новый контекст выполнения, поэтому первый контекст выполнения, созданный во время выполнения кода, называется Global Execution Context
. Теперь наш контекст выглядит так:
Мы подошли к заключительной части этой статьи, где я объясню, как обрабатываются все вышеперечисленные операции. Существует стек, который управляет глобальным контекстом выполнения и всеми другими вновь созданными контекстами выполнения, запускаемыми вызовами функций. Этот стек известен как Call Stack
.
Надеюсь, вы нашли это полезным. До встречи в следующем информативном блоге!