Теперь про контексты выполнения в JS 🫡
Если хочешь понять, как на самом деле выполняется JavaScript, посмотри на контексты выполнения (execution contexts). Это абстрактные структуры, которые описывают состояние кода в конкретный момент. В них хранится всё необходимое: лексическое окружение, которое содержит идентификаторы (алиасы, ссылающиеся на значения примитивов или объектов), информацию об области видимости и то самое значение this.
Спецификация ECMAScript определяет несколько типов: глобальный контекст (создаётся при запуске скрипта), контекст функции (при её вызове), контекст модуля и контекст для eval().
Эти контексты организованы в стек (execution context stack). Когда функция вызывается, её новый контекст помещается на вершину стека и становится активным - весь код выполняется внутри него. Как только функция завершает работу, её контекст удаляется из стека, и активным снова становится предыдущий. Этот стек управляет порядком выполнения и переключением между разными блоками кода.
Стоит отметить, что для оптимизации интерпретатор может в некоторых случаях переиспользовать или особым образом управлять этими контекстами, но логическая модель работы остаётся именно стековой.
В итоге контексты выполнения - это фундаментальный механизм языка для управления состоянием. Именно они обеспечивают изоляцию областей видимости, правильное разрешение идентификаторов и, что критично, определение значения this в каждой конкретной ситуации.
Подробнее про выполнение функций писал здесь: https://set.ki/post/VABPuMp