Skip to main content

Що робить блок finally?

Блок 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ЗавждиОчищення, завершення, звільнення ресурсів

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

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

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