JavaScript. Подробное руководство, 6-е издание
Конструкции
и<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>Эта инструкция добавляет объект в начало цепочки областей видимости, выполняет инструкцию, а затем восстанавливает первоначальное состояние цепочки.
Инструкция
не может использоваться в строгом режиме (раздел 5.7.3) и не рекомендуется к использованию в нестрогом режиме: избегайте ее использования по мере возможности. Программный код JavaScript, в котором используется инструкция<b>with</b>, сложнее поддается оптимизации и наверняка будет работать медленнее, чем эквивалентный программный код без инструкции<b>with</b>.<b>with</b>На практике инструкция
упрощает работу с глубоко вложенными иерархиями объектов. В клиентском JavaScript вам наверняка придется вводить выражения, как показано ниже, чтобы обратиться к элементам HTML-формы:<b>with</b><b>document.forms[0].address.value</b>Если подобные выражения потребуется записать много раз, можно воспользоваться инструкцией
, чтобы добавить объект формы в цепочку областей видимости:<b>with</b><b>with(document.forms[0]) {</b><b> // Далее следуют обращения к элементам формы непосредственно, например: </b><b> name.value = "";</b><b> address.value = "";</b><b> email.value = "";</b><b>}</b>Этот прием сокращает объем текста программы - больше не надо указывать фрагмент document.forms[0] перед каждым именем свойства. Этот объект представляет собой временную часть цепочки областей видимости и автоматически участвует в поиске, когда JavaScript требуется разрешить идентификаторы, такие как address. Избежать применения инструкции
достаточно просто, если записать предыдущий пример, как показано ниже:<b>with</b><b>var f = document.fоrms[0]; </b><b>f. name, value = "";</b><b>f.address.value = "";</b><b>f.email.value =" ";</b>Имейте в виду, что цепочка областей видимости используется только для поиска идентификаторов и не используется при их создании. Взгляните на следующий пример:
with(o) х = 1;
Если объект о имеет свойство х, то данный программный код присвоит значение 1 этому свойству. Но если х не является свойством объекта о, данный программный код выполнит то же действие, что и инструкция х = 1 без инструкции with. Он присвоит значение локальной или глобальной переменной с именем х или создаст новое свойство глобального объекта. Инструкция
обеспечивает более короткую форму записи операций чтения свойств объекта о, но не создания новых свойств этого объекта.<b>with</b>5.7.2. Инструкция debugger
Инструкция
обычно ничего не делает. Однако если имеется и запущена программа-отладчик, реализация JavaScript может (но не обязана) выполнять некоторые отладочные операции. Обычно эта инструкция действует подобно точке останова: интерпретатор JavaScript приостанавливает выполнение программного кода, и вы можете с помощью отладчика вывести значения переменных, ознакомиться с содержимым стека вызовов и т. д. Допустим, к примеру, что ваша функция f() порождает исключение, потому что она вызывается с неопределенным аргументом, а вы никак не можете определить, из какой точки программы производится этот вызов. Чтобы решить эту проблему, можно было бы изменить определение функции f (), чтобы она начиналась строкой, как показано ниже:<b>debugger</b>