with(document.forms[0]) {
// Далее следуют обращения к элементам формы непосредственно, например:
name.value = "";
address.value = "";
email.value = "";
}
Этот прием сокращает объем текста программы - больше не надо указывать фрагмент document.forms[0] перед каждым именем свойства. Этот объект представляет собой временную часть цепочки областей видимости и автоматически участвует в поиске, когда JavaScript требуется разрешить идентификаторы, такие как address. Избежать применения инструкции with
достаточно просто, если записать предыдущий пример, как показано ниже:
var f = document.fоrms[0];
f. name, value = "";
f.address.value = "";
f.email.value =" ";
Имейте в виду, что цепочка областей видимости используется только для поиска идентификаторов и не используется при их создании. Взгляните на следующий пример:
with(o) х = 1;
Если объект о имеет свойство х, то данный программный код присвоит значение 1 этому свойству. Но если х не является свойством объекта о, данный программный код выполнит то же действие, что и инструкция х = 1 без инструкции with. Он присвоит значение локальной или глобальной переменной с именем х или создаст новое свойство глобального объекта. Инструкция with
обеспечивает более короткую форму записи операций чтения свойств объекта о, но не создания новых свойств этого объекта.
5.7.2. Инструкция debugger
Инструкция debugger
обычно ничего не делает. Однако если имеется и запущена программа-отладчик, реализация JavaScript может (но не обязана) выполнять некоторые отладочные операции. Обычно эта инструкция действует подобно точке останова: интерпретатор JavaScript приостанавливает выполнение программного кода, и вы можете с помощью отладчика вывести значения переменных, ознакомиться с содержимым стека вызовов и т. д. Допустим, к примеру, что ваша функция f() порождает исключение, потому что она вызывается с неопределенным аргументом, а вы никак не можете определить, из какой точки программы производится этот вызов. Чтобы решить эту проблему, можно было бы изменить определение функции f (), чтобы она начиналась строкой, как показано ниже:
function f(o) {
if (о === undefined) debugger; // Временная строка для отладки
// Далее продолжается тело функции.
Теперь, когда f() будет вызвана без аргумента, ее выполнение будет приостановлено, и вы сможете воспользоваться отладчиком и просмотреть стек вызовов, чтобы отыскать место, откуда был выполнен некорректный вызов.
Официально инструкция debugger
была добавлена в язык стандартом ЕСМА-Script 5, но производители основных броузеров реализовали ее уже достаточно давно. Обратите внимание, что недостаточно иметь отладчик: инструкция debugger
не запускает отладчик автоматически. Однако, если отладчик уже запущен, эта инструкция будет действовать как точка останова. Если, к примеру, воспользоваться расширением Firebug для Firefox, это расширение должно быть активировано для веб-страницы, которую требуется отладить, и только в этом случае инструкция debugger
будет работать.
" use strict
” - это директива, введенная стандартом ECMAScript 5. Директивы не являются инструкциями (но достаточно близки, чтобы включить описание " use strict
” в эту главу). Между обычными инструкциями и директивой " use strict
" существует два важных отличия:
• Она не включает никаких зарезервированных слов языка: директива - это лишь выражение, содержащее специальный строковый литерал (в одиночных или двойных кавычках). Интерпретаторы JavaScript, не соответствующие стандарту ECMAScript 5, будут интерпретировать ее как простое выражение без побочных эффектов и ничего не будут делать. В будущих версиях стандарта ECMAScript, как ожидается, слово use будет переведено в разряд ключевых слов, что позволит опустить кавычки.
• Она может появляться только в начале сценария или в начале тела функции, перед любыми другими инструкциями. Однако она не обязательно должна находиться в самой первой строке сценария или функции: директиве "use strict"
могут предшествовать или следовать за ней другие строковые выражения-литералы, а различные реализации JavaScript могут интерпретировать эти строковые литералы как директивы, определяемые этими реализациями. Строковые литералы, следующие за первой обычной инструкцией в сценарии или функции, интерпретируются как обычные выражения - они могут не восприниматься как директивы и не оказывать никакого эффекта.
Читать дальше
Конец ознакомительного отрывка
Купить книгу