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

Конструкции

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

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

<b>инициализация ; </b>

<b>while( проверка ) {</b>

<b>  try { тело цикла ; } </b>

<b>  finally { инкремент ; }</b>

<b>}</b>

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

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

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

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

<b>with</b>
,
<b>debugger</b>
и
<b>use strict</b>
.

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

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

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

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

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

Инструкция

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

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

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

<b>document.forms[0].address.value</b>

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

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

<b>with(document.forms[0]) {</b>

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

<b>  name.value = &quot;&quot;;</b>

<b>  address.value = &quot;&quot;;</b>

<b>  email.value = &quot;&quot;;</b>

<b>}</b>

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

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

<b>var f = document.fоrms[0]; </b>

<b>f. name, value = &quot;&quot;;</b>

<b>f.address.value = &quot;&quot;;</b>

<b>f.email.value =&quot; &quot;;</b>

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

with(o) х = 1;

Если объект о имеет свойство х, то данный программный код присвоит значение 1 этому свойству. Но если х не является свойством объекта о, данный программный код выполнит то же действие, что и инструкция х = 1 без инструкции with. Он присвоит значение локальной или глобальной переменной с именем х или создаст новое свойство глобального объекта. Инструкция

<b>with</b>
обеспечивает более короткую форму записи операций чтения свойств объекта о, но не создания новых свойств этого объекта.

5.7.2. Инструкция debugger

Инструкция

<b>debugger</b>
обычно ничего не делает. Однако если имеется и запущена программа-отладчик, реализация JavaScript может (но не обязана) выполнять некоторые отладочные операции. Обычно эта инструкция действует подобно точке останова: интерпретатор JavaScript приостанавливает выполнение программного кода, и вы можете с помощью отладчика вывести значения переменных, ознакомиться с содержимым стека вызовов и т. д. Допустим, к примеру, что ваша функция f() порождает исключение, потому что она вызывается с неопределенным аргументом, а вы никак не можете определить, из какой точки программы производится этот вызов. Чтобы решить эту проблему, можно было бы изменить определение функции f (), чтобы она начиналась строкой, как показано ниже: