Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке стек викликів (call stack)?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Стек викликів (call stack)** - це структура даних, яку рушій JavaScript використовує для відстеження виконання функцій у програмі. **Ключове:** стек працює за принципом **LIFO** (Last In - First Out, останній увійшов - перший вийшов).Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Стек викликів (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** | Коли стек порожній - обробляються колбеки та проміси |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.