Execution context и call stack

↑ 2.1 JavaScript: продвинутый · → Следующая

Обязательно~3 мин чтенияУровень: middle

Зачем это на собесе

Основа для понимания hoisting, замыканий, this и ошибок «Maximum call stack size exceeded».

Объяснение

Execution context (EC) — среда, в которой выполняется код. Виды: глобальный, функциональный, eval.

Создание контекста в две фазы:

  1. Creation: создаётся Lexical Environment (переменные, объявления функций), определяется this, подготавливается ссылка на внешнее окружение (scope chain). var инициализируются undefined, let/const — в TDZ, function declarations — целиком.
  2. Execution: выполнение кода построчно, присвоение значений.

Call stack — стек контекстов: вызов функции кладёт контекст, возврат снимает. Единственный поток — один стек, поэтому синхронный тяжёлый код блокирует страницу.

function a() { b(); }
function b() { c(); }
function c() { console.trace(); }
a();
// стек: global → a → b → c

Рекурсия без базового случая: RangeError: Maximum call stack size exceeded. JS не гарантирует оптимизацию хвостовой рекурсии (реализована только в Safari).

Свойства:

ПонятиеСмысл
Lexical Environmentтаблица привязок + ссылка на внешнее окружение
Scope chainцепочка окружений для поиска переменных
this bindingопределяется при вызове (см. this, call, apply, bind, стрелочные функции)
Heapпамять для объектов
Call stackпорядок вызовов; хранит примитивы и ссылки

Асинхронный код не блокирует стек благодаря очереди задач и event loop (см. Event Loop: микро- и макрозадачи).

Нюансы и подводные камни

  • Глубокая рекурсия (обход большого дерева) → итеративный алгоритм с явным стеком.
  • Долгие синхронные функции блокируют рендер и события.
  • Ошибки содержат stack trace — читайте его снизу вверх.
  • Замыкания хранят окружение в куче, а не в стеке.

Практика

  1. Нарисуйте call stack для цепочки вызовов и запишите порядок создания/удаления контекстов.
  2. Вызовите переполнение стека и перепишите рекурсию в цикл.
  3. Найдите блокирующую функцию в Performance.

Вопросы с ответами

Связанные темы