JavaScript. Подробное руководство, 6-е издание, стр. 56

<b>function square(x) { return х*х; } // Функция с инструкцией return</b>

<b>square(2)                          // Этот вызов вернет 4</b>

Если функция не имеет инструкции return, при ее вызове интерпретатор будет выполнять инструкции в теле функции одну за другой, пока не достигнет конца функции, и затем вернет управление вызвавшей ее программе. В этом случае выражение вызова вернет значение

<b>undefined</b>
. Инструкция
<b>return</b>
часто является последней инструкцией в функции, но это совершенно необязательно: функция вернет управление вызывающей программе, как только будет достигнута инструкция
<b>return</b>
, даже если за ней следуют другие инструкции в теле функции.

Инструкция

<b>return</b>
может также использоваться без выражения, тогда она просто прерывает выполнение функции и возвращает значение
<b>undefined</b>
вызывающей программе. Например:

<b>function display_object(o) {</b>

<b>  // Сразу же вернуть управление, если аргумент имеет значение null или undefined </b>

<b>  if (!о) return;</b>

<b>  // Здесь находится оставшаяся часть функции...</b>

<b>}</b>

Из-за того что интерпретатор JavaScript автоматически вставляет точки с запятой, нельзя разделять переводом строки инструкцию

<b>return</b>
и следующее за ней выражение.

5.6.5. Инструкция throw

Исключение - это сигнал, указывающий на возникновение какой-либо исключительной ситуации или ошибки. Возбуждение исключения (

<b>throw</b>
) - это способ просигнализировать о такой ошибке или исключительной ситуации. Перехватить исключение (
<b>catch</b>
) - значит обработать его, т. е. предпринять действия, необходимые или подходящие для восстановления после исключения. В JavaScript исключения возбуждаются в тех случаях, когда возникает ошибка времени выполнения и когда программа явно возбуждает его с помощью инструкции
<b>throw</b>
. Исключения перехватываются с помощью инструкции
<b>try/catch/finally</b>
, которая описана в следующем разделе.

Инструкция

<b>throw</b>
имеет следующий синтаксис:

<b>throw выражение;</b>

Результатом выражения может быть значение любого типа. Инструкции throw можно передать число, представляющее код ошибки, или строку, содержащую текст сообщения об ошибке. Интерпретатор JavaScript возбуждает исключения, используя экземпляр класса

<b>Error</b>
одного из его подклассов, и вы также можете использовать подобный подход. Объект
<b>Error</b>
имеет свойство
<b>name</b>
, определяющее тип ошибки, и свойство
<b>message</b>
, содержащее строку, переданную функции-конструктору (смотрите описание класса
<b>Error</b>
в справочном разделе). Ниже приводится пример функции, которая возбуждает объект
<b>Error</b>
при вызове с недопустимым аргументом:

<b>function factorial(x) {</b>

<b>  // Если входной аргумент не является допустимым значением, возбуждается исключение! </b>

<b>  if (х &lt; 0) throw new Error(&quot;x не может быть отрицательным&quot;);</b>

<b>  // В противном случае значение вычисляется и возвращается нормальным образом </b>

<b>  for(var f = 1; х&gt;1; f*=x, х--) /* пустое тело цикла */ ; </b>

<b>  return f;</b>

<b>}</b>

Когда возбуждается исключение, интерпретатор JavaScript немедленно прерывает нормальное выполнение программы и переходит к ближайшему [7] обработчику исключений. В обработчиках исключений используется конструкция

<b>catch</b>
инструкции
<b>try/catch/finally</b>
, описание которой приведено в следующем разделе. Если блок программного кода, в котором возникло исключение, не имеет соответствующей конструкции
<b>catch</b>
, интерпретатор анализирует следующий внешний блок программного кода и проверяет, связан ли с ним обработчик исключений. Это продолжается до тех пор, пока обработчик не будет найден. Если исключение генерируется в функции, не содержащей инструкции
<b>try/catch/finally</b>
, предназначенной для его обработки, то исключение распространяется выше, в программный код, вызвавший функцию. Таким образом исключения распространяются по лексической структуре методов JavaScript вверх по стеку вызовов. Если обработчик исключения так и не будет найден, исключение рассматривается как ошибка и о ней сообщается пользователю.

5.6.6. Инструкция try/catch/finally

Инструкция

<b>try/catch/finally</b>
реализует механизм обработки исключений в JavaScript. Конструкция
<b>try</b>
в этой инструкции просто определяет блок кода, в котором обрабатываются исключения. За блоком
<b>try</b>
следует конструкция
<b>catch</b>
с блоком инструкций, вызываемых, если где-либо в блоке
<b>try</b>
возникает исключение. За конструкцией
<b>catch</b>
следует блок
<b>finally</b>
, содержащий программный код, выполняющий заключительные операции, который гарантированно выполняется независимо от того, что происходит в блоке
<b>try</b>
. И блок
<b>catch</b>
, и блок
<b>finally</b>
не являются обязательными, однако после блока
<b>try</b>
должен обязательно присутствовать хотя бы один из них. Блоки
<b>try, catch</b>
и
<b>finally</b>
начинаются и заканчиваются фигурными скобками. Это обязательная часть синтаксиса, и она не может быть опущена, даже если между ними содержится только одна инструкция.