Skip to main content

Що таке стек викликів (call stack)?

Стек викликів (call stack) - це структура даних, яку рушій JavaScript використовує для відстеження виконання функцій у програмі.

Принцип роботи

Коли JavaScript виконує код, він має знати:

  • яка функція виконується зараз,
  • звідки вона була викликана,
  • куди повернутися після завершення.

Для цього використовується стек викликів - структура за принципом LIFO (Last In - First Out, останній увійшов - перший вийшов).

Як це виглядає на практиці

Приклад:

javascript
function a() { console.log('a'); b(); } function b() { console.log('b'); c(); } function c() { console.log('c'); } a();

Покроково:

  1. Виклик a() -> потрапляє в стек. Стек: [a]
  2. a() викликає b() -> b() додається. Стек: [a, b]
  3. b() викликає c() -> c() додається. Стек: [a, b, c]
  4. c() завершується -> видаляється. Стек: [a, b]
  5. b() завершується -> видаляється. Стек: [a]
  6. a() завершується -> видаляється. Стек: [] (порожній)

Що станеться при нескінченній рекурсії

Якщо функція викликає сама себе без виходу:

javascript
function recurse() { recurse(); } recurse();

Кожен виклик додається в стек, але ніколи не видаляється. У підсумку станеться "Stack overflow" (переповнення стека) - помилка, яка означає, що стек викликів переповнився.

Зв'язок з Event Loop

JavaScript однопотоковий, тобто в кожен момент часу виконується лише одна функція зі стека. Коли стек порожній, рушій може взяти наступне завдання з черги (callback queue) і почати новий цикл Event Loop.

Підсумок

ТермінОпис
Call StackМісце, де рушій зберігає контекст виконання функцій
LIFOОстанній викликаний - перший завершений
Stack OverflowПомилка при переповненні стека
Зв'язок з Event LoopКоли стек порожній - обробляються колбеки та проміси

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.