Чтение онлайн

на главную - закладки

Жанры

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

}

Это пример инструкции

try/catch
без конструкции
finally
. Хотя
finally
используется не так часто, как
catch
, тем не менее иногда эта конструкция оказывается полезной. Однако ее поведение требует дополнительных объяснений. Блок
finally
гарантированно исполняется, если исполнялась хотя бы какая-то часть блока
try
, независимо от того, каким образом завершилось выполнение программного кода в блоке
try
.
Эта возможность обычно используется для выполнения заключительных операций после выполнения программного кода в предложении
try
.

В обычной ситуации управление доходит до конца блока

try
, а затем переходит к блоку
finally
, который выполняет необходимые заключительные операции. Если управление вышло из блока
try
как результат выполнения инструкций
return
,
continue
или
break
, перед передачей управления в другое место выполняется блок
finally
.

Если в блоке

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

Если сам блок

finally
передает управление с помощью инструкции
return
,
continue
,
break
или
throw
или путем вызова метода, генерирующего исключение, незаконченная команда на передачу управления отменяется и выполняется новая. Например, если блок
finally
сгенерирует исключение, это исключение заменит любое ранее сгенерированное исключение. Если в блоке
finally
имеется инструкция
return
, произойдет нормальный выход из метода, даже если генерировалось исключение, которое не было обработано.

Конструкции

try
и
finally
могут использоваться вместе без конструкции
сatch
. В этом случае блок
finally
– это просто набор инструкций, выполняющих заключительные операции, который будет гарантированно выполнен независимо от наличия в блоке
try
инструкции
break
,
continue
или
return
. Напомню, из-за различий в работе инструкции
continue
в разных циклах невозможно написать цикл
while
, полностью имитирующий работу цикла
for
. Однако если добавить инструкцию
try/finally
, можно написать цикл
while
, который будет действовать точно так же, как цикл
for
, и корректно обрабатывать инструкцию
continue
:

// Имитация цикла for( инициализация ; проверка ; инкремент ) тело цикла;

инициализация ;

while(
проверка ) {

try { тело цикла ; }

finally { инкремент ; }

}

Обратите однако внимание, что тело цикла

while
, содержащее инструкцию
break
, будет вести себя несколько иначе (из-за выполнения лишней операции инкремента перед выходом), чем тело цикла
for
, поэтому даже используя конструкцию
finally
, невозможно точно сымитировать цикл
for
с помощью цикла
while
.

5.7. Прочие инструкции

В этом разделе описываются три остальные инструкции языка JavaScript -

with
,
debugger
и
use strict
.

5.7.1. Инструкция with

В разделе 3.10.3 мы обсуждали область видимости переменных и цепочки областей видимости - список объектов, в которых выполняется поиск при разрешении имен переменных. Инструкция

with
используется для временного изменения цепочки областей видимости. Она имеет следующий синтаксис:

with (объект) инструкция

Эта инструкция добавляет объект в начало цепочки областей видимости, выполняет инструкцию, а затем восстанавливает первоначальное состояние цепочки.

Инструкция

with
не может использоваться в строгом режиме (раздел 5.7.3) и не рекомендуется к использованию в нестрогом режиме: избегайте ее использования по мере возможности. Программный код JavaScript, в котором используется инструкция
with
, сложнее поддается оптимизации и наверняка будет работать медленнее, чем эквивалентный программный код без инструкции
with
.

На практике инструкция

with
упрощает работу с глубоко вложенными иерархиями объектов. В клиентском JavaScript вам наверняка придется вводить выражения, как показано ниже, чтобы обратиться к элементам HTML-формы:

document.forms[0].address.value

Если подобные выражения потребуется записать много раз, можно воспользоваться инструкцией

with
, чтобы добавить объект формы в цепочку областей видимости:

with(document.forms[0]) {

// Далее следуют обращения к элементам формы непосредственно, например:

name.value = "";

address.value = "";

email.value = "";

}

Этот прием сокращает объем текста программы - больше не надо указывать фрагмент document.forms[0] перед каждым именем свойства. Этот объект представляет собой временную часть цепочки областей видимости и автоматически участвует в поиске, когда JavaScript требуется разрешить идентификаторы, такие как address. Избежать применения инструкции

with
достаточно просто, если записать предыдущий пример, как показано ниже:

Поделиться:
Популярные книги

Наномашины, ученик! Том 6

Новиков Николай Васильевич
6. Первый среди карапузов
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наномашины, ученик! Том 6

Хозяин Теней 3

Петров Максим Николаевич
3. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Хозяин Теней 3

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Стражи душ

Кас Маркус
4. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Стражи душ

Поводырь

Щепетнов Евгений Владимирович
3. Ботаник
Фантастика:
фэнтези
6.17
рейтинг книги
Поводырь

Неофит

Листратов Валерий
3. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неофит

Тьма и Хаос

Владимиров Денис
6. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Тьма и Хаос

Сильнейший Столп Империи. Книга 5

Ермоленков Алексей
5. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 5

Бастард

Майерс Александр
1. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард

Вечный. Книга VI

Рокотов Алексей
6. Вечный
Фантастика:
рпг
фэнтези
5.00
рейтинг книги
Вечный. Книга VI

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Двойник короля 19

Скабер Артемий
19. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 19

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Бастард Императора. Том 15

Орлов Андрей Юрьевич
15. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 15