JavaScript | Как выполнение функции может не дойти до return?

JavaScript | Как выполнение функции может не дойти до return?

Оператор return относится к операторам «внезапного завершения» функции. Это значит, что кроме return существуют другие операторы, которые могут внезапно завершить выполнение функции.

Список операторов «внезапного завершения» по стандарту ECMAScript:

  1. break
  2. continue
  3. return
  4. throw

Пример функции, которая завершается из-за оператора throw перед оператором return.

function f_throw(){
   throw(10);
   return 20;
};

Скриншот вызова данной функции:

Функция не дошла до выполнения return из-за throw - JavaScript
Функция не дошла до выполнения return из-за throw — JavaScript

 

Оператор throw говорит нам о выбрасывании исключения и принудительной остановки выполнения функции в месте исключения. Простыми словами можно сказать, что остановка выполнения функции случилась из-за какой-то ошибки. Это значит, что все последующие команды в теле функции не будут выполнены.

 

В чём отличие throw от return в JavaScript?

Оператор return постарается вернуть из функции какое-то значение для дальнейшей работы. Функция завершится внезапно, но её завершение может быть логически обосновано и вся остальная часть программы продолжит своё выполнение. Программа будет работать дальше.

Оператор throw выбросит исключение, которое приведёт к остановке выполнения всей программы скриптового файла, если мы никак не перехватим это исключение и не обработаем его корректным образом. Если мы хотим писать устойчивые программы, то мы должны обязательно использовать операторы перехвата исключений, например оператор try catch finally.

 

Информационные ссылки

Стандарт ECMAScript — Раздел «6.2.4 The Completion Record Specification Type» — https://tc39.es/ecma262/multipage/ecmascript-data-types-and-values.html#sec-completion-record-specification-type