Пошук уроків, статей та іншого контенту
Як JavaScript Engine читає, аналізує та виконує JavaScript-код.
Комп'ютер не може безпосередньо виконувати текст:
const price = 100;
console.log(price);
Для виконання JavaScript потрібна спеціальна програма — JavaScript Engine, або рушій JavaScript.
JavaScript Engine читає, аналізує та виконує JavaScript-код.
У дуже спрощеному вигляді:
JavaScript-код
↓
Parsing
↓
Внутрішнє представлення коду
↓
Інтерпретація / компіляція
↓
Машинний код
↓
Виконання процесоромСпочатку рушій аналізує синтаксис програми.
Якщо написати:
const name = ;код синтаксично неправильний.
Рушій не зможе нормально його розібрати та повідомить про помилку, наприклад:
SyntaxErrorПісля аналізу код перетворюється на структуру, зручну для роботи рушія, — Abstract Syntax Tree, або AST.
Наприклад:
const result = 2 + 3;Для рушія це не просто рядок тексту. Він розуміє структуру:
створити змінну result
↓
обчислити 2 + 3
↓
записати результатРозробнику зазвичай не потрібно працювати з AST напряму, але розуміння його існування допомагає краще уявляти процес виконання коду.
Сучасні JavaScript-рушії використовують складні механізми оптимізації.
Часто застосовується JIT — Just-In-Time compilation.
Рушій може:
швидко почати виконувати код;
аналізувати, які його частини виконуються часто;
оптимізувати такі ділянки;
створювати ефективніший машинний код.
Саме тому твердження «JavaScript — просто інтерпретована мова» є надто спрощеним для сучасних реалізацій.
Для виконання функцій JavaScript використовує стек викликів — Call Stack.
function greet() {
console.log("Привіт");
}
greet();Спрощено:
greet()
↓
console.log()
↓
console.log завершується
↓
greet завершуєтьсяФункції додаються до стеку під час виклику та видаляються після завершення.
Ця концепція стане особливо важливою при вивченні асинхронності та Event Loop.
Рушій JavaScript не відповідає за все.
Наприклад:
setTimeout(() => {
console.log("Hello");
}, 1000);Таймер пов'язаний не лише з JavaScript Engine, а й із середовищем виконання — браузером або Node.js.
Тому модель виглядає приблизно так:
JavaScript Engine
+
Web APIs
+
Event Loop
+
інші компоненти браузераДумати, що браузер виконує JavaScript «як текст». Код проходить аналіз і внутрішні етапи підготовки.
Вважати JavaScript виключно інтерпретованою мовою. Сучасні рушії активно використовують JIT-компіляцію.
Плутати JavaScript Engine з браузером. Engine — лише один із компонентів середовища.
JavaScript Engine — це рушій, який аналізує та виконує JavaScript-код.
Для початку достатньо пам'ятати просту модель:
код → аналіз → підготовка → виконанняПізніше до неї додадуться важливі поняття: Call Stack, Heap, Event Loop, Task Queue та Microtask Queue.