Выбор ответа Middle Ошибки обновлено

return в finally глотает ошибку

Вопрос

Что выведет код?

function save() {
  try {
    throw new Error('сбой записи');
  } finally {
    return 'из finally';
  }
}
console.log(save());

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 'из finally', а ошибка пропадёт. return в finally заменяет результат всего блока try, в том числе брошенное исключение: ошибка исчезает бесследно, функция нормально возвращает 'из finally'.

Варианты ответа

  1. Неперехваченная ошибка сбой записи
  2. undefined
  3. 'из finally', а ошибка пропадётправильный ответ
  4. Сначала 'из finally', затем неперехваченная ошибка

Разбор

return в finally заменяет результат всего блока try, в том числе брошенное исключение: ошибка исчезает бесследно, функция нормально возвращает 'из finally'. Поэтому return и throw в finally считаются плохой практикой, линтер ESLint ругается правилом no-unsafe-finally. Без return в finally ошибка ушла бы наружу после выполнения finally.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме