Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: finally, exception handling, try catch, error, cleanup

Как работает finally?

Вопрос проверяет понимание блока finally в обработке исключений, который гарантирует выполнение кода независимо от того, было выброшено исключение или нет.

Короткий ответ

Блок finally — это часть конструкции try...catch в JavaScript, которая выполняется всегда после блоков try и catch, независимо от того, произошла ошибка или нет. Он используется для освобождения ресурсов, закрытия соединений или выполнения обязательных завершающих действий. Например, если вы открыли файл в блоке try, в finally можно гарантированно его закрыть, даже если при чтении возникла ошибка.

Длинный ответ

Конструкция try...catch...finally в JavaScript предоставляет механизм для обработки ошибок (исключений) и выполнения обязательного завершающего кода. Блок finally следует после блоков try и catch (или только после try) и выполняется всегда, независимо от того, было ли выброшено исключение в блоке try и было ли оно перехвачено в catch.

Как это работает

Поток выполнения:

  1. Выполняется код внутри блока try.
  2. Если в try возникает ошибка, выполнение немедленно переходит в блок catch (если он есть).
  3. После завершения блока try (и catch, если ошибка была) выполняется блок finally.
  4. Если в блоке finally нет оператора return или выброса нового исключения, выполнение продолжается после всей конструкции.

Ключевая особенность: блок finally выполняется даже если в try или catch встречается оператор return, break или continue.

Примеры использования

Типичный сценарий — освобождение ресурсов, например, закрытие файлового потока или соединения с базой данных, чтобы избежать утечек.

let resource = acquireResource(); // Получаем ресурс

try {
  // Работаем с ресурсом, что может вызвать ошибку
  useResource(resource);
  console.log('Операция успешна');
} catch (error) {
  console.error('Произошла ошибка:', error.message);
} finally {
  // Этот код выполнится в любом случае
  releaseResource(resource); // Гарантированно освобождаем ресурс
  console.log('Ресурс освобождён');
}
// Выполнение продолжится здесь

Другой пример, демонстрирующий поведение с return:

function testFinally() {
  try {
    console.log('Внутри try');
    return 'возврат из try'; // Оператор return
  } catch (err) {
    console.log('Внутри catch');
  } finally {
    console.log('Внутри finally'); // Этот console.log выполнится ДО возврата значения
  }
  console.log('Этот код никогда не выполнится');
}

const result = testFinally();
console.log('Результат функции:', result);
// Вывод:
// Внутри try
// Внутри finally
// Результат функции: возврат из try

Где применяется

  • Очистка ресурсов: Закрытие файловых дескрипторов, сетевых соединений, транзакций БД.
  • Сброс состояния: Например, снятие флага загрузки в UI после попытки запроса, независимо от его успеха.
  • Логирование: Запись факта завершения операции в лог.
  • В асинхронном коде с async/await принцип остаётся тем же, но нужно помнить, что finally выполнится после разрешения/отклонения Promise.

Вывод: Блок finally необходим, когда требуется гарантированно выполнить какой-либо код (чаще всего — очистку) после попытки выполнения основной операции, независимо от её исхода. Это ключевой инструмент для написания надёжного и устойчивого к ошибкам кода.

Уровень

  • Рейтинг:

    3

  • Сложность:

    2

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#finally

#exception handling

#try catch

#error

#cleanup

Подпишись на Python Developer в телеграм