Да, вы поняли меня правильно. Всякий раз, когда вы запускаете код 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.

Надеюсь, вы нашли это полезным. До встречи в следующем информативном блоге!