Как выполняется JS?
Основы языка
JavaScript выполняется движком (например, V8): код парсится в AST, компилируется в байт-код, интерпретируется и оптимизируется JIT-компиляцией, а асинхронность обеспечивает Event Loop.
Этапы выполнения в движке
- Парсинг — исходный код разбирается в AST (абстрактное синтаксическое дерево).
- Компиляция в байт-код — интерпретатор (Ignition в V8) генерирует байт-код.
- Выполнение — байт-код интерпретируется.
- JIT-оптимизация — «горячие» участки компилируются оптимизирующим компилятором (TurboFan) в машинный код; при неверных предположениях — деоптимизация.
Исходник → AST → байт-код → интерпретация + JITМодель выполнения
- Call Stack — стек, где выполняется синхронный код (одна операция за раз, однопоточно).
- Heap — куча для объектов.
- Web API / окружение — таймеры, сеть, DOM вне движка.
- Event Loop + очереди — микро- и макрозадачи для асинхронности.
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
// 1, 4, 3, 2Контекст выполнения
Каждый вызов создаёт контекст выполнения (переменные, this, ссылку на внешнее окружение) — они образуют стек.
Коротко для собеседования
Движок (V8): парсит код в AST → байт-код → интерпретирует → JIT-компилирует горячие участки в машинный код. Синхронный код идёт в call stack (однопоточно), асинхронный — через Web API и Event Loop (микро/макрозадачи). Каждый вызов — свой контекст выполнения.