Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Коли виконується блок catch?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Блок **`catch`** виконується лише тоді, коли в блоці `try` виникла помилка (виняток) - або кинута вручну (`throw`), або автоматично (наприклад, `ReferenceError`, `TypeError` тощо). **Ключове:** якщо код усередині `try` виконався без помилок, `catch` пропускається.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Коротка відповідь Блок `catch` **виконується лише тоді**, коли в блоці `try` **виникла помилка (виняток)** - або кинута вручну (`throw`), або автоматично (наприклад, `ReferenceError`, `TypeError` і т. д.). Якщо код усередині `try` виконався без помилок - `catch` **пропускається**. --- ## Покроковий механізм роботи 1. Код усередині `try { ... }` починає виконуватися порядково. 2. Якщо в ньому **не виникає помилок**, `catch` не викликається. 3. Якщо всередині `try` **сталася помилка**, виконання `try` негайно **переривається**, і керування переходить у `catch`. 4. У `catch(error)` доступний **об'єкт помилки**, який можна обробити або вивести. --- ## Приклад 1. Помилки немає -> `catch` не спрацьовує ```javascript try { console.log("Все працює чудово!"); } catch (error) { console.log("Спіймали помилку:", error.message); } console.log("Продовжуємо виконання..."); ``` Вивід: ```javascript Все працює чудово! Продовжуємо виконання... ``` > Оскільки всередині `try` не було помилок - `catch` не виконується. --- ## Приклад 2. Помилка є -> `catch` виконується ```javascript try { console.log("Початок"); throw new Error("Сталася помилка!"); console.log("Цей код не виконається"); } catch (error) { console.log("Спіймали:", error.message); } ``` Вивід: ```javascript Початок Спіймали: Сталася помилка! ``` > Після `throw` виконання `try` припиняється, > і керування передається в `catch`. --- ## Приклад 3. Автоматична помилка ```javascript try { console.log(a); // ReferenceError: a is not defined } catch (error) { console.log("Спіймали:", error.name); // ReferenceError } ``` > Тут `catch` спрацьовує, тому що JS автоматично кинув виняток при зверненні до неіснуючої змінної. --- ## Приклад 4. Кілька рядків - помилка "обриває" try ```javascript try { console.log("1"); JSON.parse("not valid JSON"); // помилка тут console.log("2"); // не виконається } catch (error) { console.log("Спіймали:", error.message); } console.log("3"); ``` Вивід: ```javascript 1 Спіймали: Unexpected token n in JSON at position 0 3 ``` > Щойно сталася помилка, `try` переривається, і виконується `catch`. --- ## Приклад 5. Помилка поза `try` - `catch` не спрацьовує ```javascript try { console.log("Все добре всередині try"); } catch (error) { console.log("Спіймали помилку:", error.message); } throw new Error("Помилка поза try!"); // не перехопиться ``` Помилка не буде спіймана, тому що сталася **поза** блоком `try`. --- ## Приклад 6. Помилка всередині асинхронного коду > Важливо: `try...catch` **не ловить помилки всередині колбеків і промісів**, > якщо не використовувати `await` або `catch()`. ```javascript try { setTimeout(() => { throw new Error("Помилка в колбеку"); // не спіймається }, 1000); } catch (e) { console.log("Спіймано:", e.message); } ``` > Щоб ловити помилки з промісів - потрібно використовувати `async/await` або `.catch()`: Правильно: ```javascript async function run() { try { await Promise.reject(new Error("Помилка в промісі")); } catch (e) { console.log("Спіймали:", e.message); } } run(); ``` --- ## Приклад 7. Якщо помилок кілька - ловиться перша ```javascript try { throw new Error("Помилка 1"); throw new Error("Помилка 2"); // не виконається } catch (err) { console.log("Спіймана:", err.message); } ``` Вивід: ```javascript Спіймана: Помилка 1 ``` --- ## Підсумок | Ситуація | Чи виконується catch? | Причина | |---|---|---| | У `try` немає помилок | Ні | Код відпрацював нормально | | У `try` кинуто `throw` | Так | Виняток оброблено | | JS сам кинув помилку (ReferenceError тощо) | Так | Автоматична помилка | | Помилка поза `try` | Ні | Не входить у область обробки | | Помилка в колбеку/Promise без await | Ні | Асинхронний код поза try |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.