Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по Java Script 1.doc
Скачиваний:
133
Добавлен:
12.02.2015
Размер:
1.44 Mб
Скачать

Инструкция return

Как вы помните, вызов функции с помощью оператора () представляет собой выражение. Все выражения имеют значения, и инструкция return служит для определения значения, возвращаемого функцией. Это значение становится значением выражения вызова функции. Инструкция return имеет следующий синтаксис:

return выражение;

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

Инструкция return прекращает исполнение функции, даже если в теле функции остались другие инструкции. Инструкция return используется для возвращения значения следующим образом:

function square(x) { return x*x; }

Инструкция return может также использоваться без выражения, тогда она просто прерывает исполнение функции, не возвращая значение. Например:

function display_object(obj) {

// Сначала убедимся в корректности нашего аргумента

// В случае некорректности пропускаем остаток функции

if (obj == null) return;

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

}

Если в функции выполняется инструкция return без выражения или если выполнение функции прекращается по причине достижения конца тела функции, значение выражения вызова функции оказывается неопределенным (undefined).

JavaScript вставляет точку с запятой автоматически, поэтому нельзя разделять переводом строки инструкцию return и следующее за ней выражение.

Инструкция throw

Исключение – это сигнал, указывающий на возникновение какой-либо исключительной ситуации или ошибки. Генерация исключения (throw) – это способ просигнализировать о такой ошибке или исключительной ситуации.

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

Инструкция throw имеет следующий синтаксис:

throw выражение;

Результатом выражения может быть значение любого типа. Однако обычно это объект Error или экземпляр одного из подклассов Error. Также бывает удобно использовать в качестве выражения строку, содержащую сообщение об ошибке или числовое значение, обозначающее некоторый код ошибки. Вот пример кода, в котором инструкция throw применяется для генерации исключения:

function factorial(x) {

// Если входной аргумент не является допустимым,

// генерируем исключение!

if (x < 0) throw new Error("x не может быть отрицательным");

// В противном случае вычисляем значение и нормальным образом выходим

// из функции

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

return f;

}

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

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

Инструкция throw стандартизована в ECMAScript v3 и реализована в JavaScript 1.4. Класс Error и его подклассы также являются частью стандарта ECMAScript v3, но они не были реализованы до JavaScript 1.5.