Выбрать главу

Если сам блок 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]) {

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