В главе 4 мы обсуждали область видимости переменных и цепочку областей ви_ димости – список объектов, в которых выполняется поиск при разрешении име_ ни переменной. Инструкция with используется для временного изменения це_ почки областей видимости. Она имеет следующий синтаксис:
with (объект)
инструкция
Эта инструкция добавляет объект в начало цепочки областей видимости, испол_ няет инструкцию, а затем восстанавливает цепочку в ее первоначальном состоянии.
На практике инструкция with помогает значительно сократить объем набирае_ мого текста. В клиентском языке JavaScript часто работают с глубоко вложен_ ными иерархиями объектов. Например, для доступа к элементам HTML_формы вам, возможно, придется пользоваться такими выражениями:
frames[1].document.forms[0].address.value
Если надо обратиться к этой форме несколько раз, можно воспользоваться инст_ рукцией with для добавления формы в цепочку областей видимости:
with(frames[1].document.forms[0]) {
// Здесь обращаемся к элементам формы непосредственно, например: name.value = "";
address.value = ""; email.value = "";
}
Это сокращает объем текста программы – больше не надо указывать фрагмент frames[1].document.forms[0] перед каждым именем свойства. Этот объект пред_ ставляет собой временную часть цепочки областей видимости и автоматически участвует в поиске, когда JavaScript требуется разрешить такой идентифика_ тор, как address.
Несмотря на удобство этой конструкции в некоторых случаях, ее использование не приветствуется. JavaScript_код с инструкцией with сложен в оптимизации и поэтому может работать медленнее, чем эквивалентный код, написанный без
6.19. Пустая инструкция
нее. Кроме того, определения функций и инициализация переменных в теле ин_ струкции with могут приводить к странным и трудным для понимания результа_ там.1 По этим причинам использовать инструкцию with не рекомендуется.
К тому же существуют и другие абсолютно законные способы уменьшения объема набираемого текста. Так, предыдущий пример можно переписать следующим образом: