Из каких основных элементов состоит контекст?
Объекты и прототипы
Контекст выполнения состоит из основных элементов: лексического окружения (переменные), значения `this` и ссылки на внешнее окружение (для scope chain).
Основные элементы
Лексическое окружение (Lexical Environment)
Хранит переменные, функции и параметры текущей области видимости:
function fn(a) {
let b = 2; // a и b — в лексическом окружении fn
}Включает Environment Record (сами переменные) и ссылку на внешнее окружение.
Значение this
Определяется способом вызова (метод → объект, new → новый объект, и т. д.):
const obj = { method() { return this; } }; // this = objСсылка на внешнее окружение
Связь с окружением, где код был объявлен — для поиска переменных по цепочке (scope chain):
function outer() {
let x = 1;
function inner() { return x; } // x найдётся через внешнюю ссылку
}Две фазы создания контекста
- Создание (creation) — регистрация переменных (hoisting:
var→undefined,let/const→TDZ, функции), определениеthisи внешней ссылки. - Выполнение (execution) — построчное исполнение кода.
Виды контекстов
- Глобальный — один, при запуске.
- Функциональный — на каждый вызов (кладётся в call stack).
Коротко для собеседования
Контекст выполнения состоит из: лексического окружения (переменные, функции, параметры + ссылка на внешнее окружение), значения this (по способу вызова) и связи для scope chain. Проходит фазы создания (hoisting, this) и выполнения. Создаётся при вызове функции, кладётся в call stack.