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