Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить блок finally?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Блок **`finally`** у конструкції `try...catch...finally` - це частина механізму обробки помилок, яка використовується для виконання коду в будь-якому разі, незалежно від того, сталася помилка чи ні. **Ключове:** `finally` виконується завжди, після `try` і `catch`, навіть якщо в `try` сталася помилка, спрацював `throw`, або з функції був зроблений `return`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняБлок `finally` у конструкції `try...catch...finally` - це **частина механізму обробки помилок**, яка використовується для **виконання коду в будь-якому разі** - незалежно від того, сталася помилка чи ні. --- ## Коротко > `finally` виконується **завжди**, після `try` і `catch`, > навіть якщо в `try` сталася помилка, спрацював `throw`, > або з функції був зроблений `return`. --- ## Синтаксис ```javascript try { // код, який може викликати помилку } catch (error) { // обробка помилки } finally { // код, який виконається в будь-якому разі } ``` --- ## Як це працює покроково 1. Виконується код у `try`. 2. Якщо в `try` **помилки немає** → `catch` пропускається → виконується `finally`. 3. Якщо в `try` **виникла помилка** → виконується `catch` → потім `finally`. 4. Після `finally` виконання програми продовжується далі. --- ## Приклад 1. Помилки немає - `finally` все одно виконується ```javascript try { console.log("try: усе добре"); } catch (e) { console.log("catch: помилка"); } finally { console.log("finally: виконується завжди"); } ``` Вивід: ```javascript try: усе добре finally: виконується завжди ``` --- ## Приклад 2. Помилка є - `finally` теж виконується ```javascript try { throw new Error("Помилка!"); } catch (e) { console.log("catch:", e.message); } finally { console.log("finally: виконується завжди"); } ``` Вивід: ```javascript catch: Помилка! finally: виконується завжди ``` --- ## Приклад 3. `finally` виконується навіть при `return` ```javascript function test() { try { console.log("try"); return "Із try"; } catch { console.log("catch"); } finally { console.log("finally"); } } console.log("Результат:", test()); ``` Вивід: ```javascript try finally Результат: Із try ``` > Навіть якщо з `try` був зроблений `return`, > блок `finally` **все одно виконується перед виходом із функції**. --- ## Приклад 4. `finally` виконується при `throw` ```javascript try { throw new Error("Помилка!"); } catch (e) { console.log("catch:", e.message); } finally { console.log("finally виконується попри все"); } ``` Вивід: ```javascript catch: Помилка! finally виконується попри все ``` --- ## Приклад 5. `finally` виконується навіть при помилці в `catch` ```javascript try { throw new Error("Помилка в try"); } catch (e) { console.log("catch:", e.message); throw new Error("Помилка в catch"); } finally { console.log("finally все одно виконається"); } ``` Вивід: ```javascript catch: Помилка в try finally все одно виконається Uncaught Error: Помилка в catch ``` > Навіть якщо в `catch` знову сталася помилка - `finally` відпрацює. --- ## Приклад 6. `finally` може змінити поведінку `return` Якщо в `finally` є `return`, він **перезапише** результат із `try` або `catch`: ```javascript function test() { try { return "Із try"; } finally { return "Із finally"; } } console.log(test()); // "Із finally" ``` > Це вважається **поганою практикою**, тому що робить поведінку функції непередбачуваною. --- ## Основні застосування Звільнення ресурсів: ```javascript try { openConnection(); executeQuery(); } catch (e) { console.error("Помилка:", e); } finally { closeConnection(); // виконується завжди } ``` Очищення тимчасових даних Зняття блокувань Завершення операцій незалежно від результату --- ## Підсумок | Блок | Коли виконується | Призначення | |---|---|---| | `try` | Завжди | Код, де може статися помилка | | `catch` | Тільки при помилці | Обробка винятків | | `finally` | **Завжди** | Очищення, завершення, звільнення ресурсів |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.