JavaScript. Подробное руководство, 6-е издание
5.6. Переходы
Еще одной категорией инструкций языка JavaScript являются инструкции перехода. Как следует из названия, эти инструкции заставляют интерпретатор JavaScript переходить в другое место в программном коде. Инструкция
заставляет интерпретатор перейти в конец цикла или другой инструкции. Инструкция<b>break</b>заставляет интерпретатор пропустить оставшуюся часть тела цикла, перейти обратно в начало цикла и приступить к выполнению новой итерации. В языке JavaScript имеется возможность помечать инструкции именами, благодаря чему в инструкциях<b>continue</b>и<b>break</b>можно явно указывать, к какому циклу или к какой другой инструкции они относятся.<b>continue</b>Инструкция
заставляет интерпретатор перейти из вызванной функции обратно в точку ее вызова и вернуть значение вызова. Инструкция<b>return</b>возбуждает исключение и предназначена для работы в сочетании с инструкцией<b>throw</b>, которая определяет блок программного кода для обработки исключения. Это достаточно сложная разновидность инструкции перехода: при появлении исключения интерпретатор переходит к ближайшему объемлющему обработчику исключений, который может находиться в той же функции или выше, в стеке возвратов вызванной функции.<b>try/catch/finally</b>Подробнее все эти инструкции перехода описываются в следующих подразделах.
5.6.1. Метки инструкций
Любая инструкция может быть помечена указанным перед ней идентификатором и двоеточием:
<b>идентификатор: инструкция</b>любую инструкцию, однако помечать имеет смысл только инструкции, имеющие тело, такие как циклы и условные инструкции. Присвоив имя циклу, его затем можно использовать в инструкциях
и<b>break</b>, внутри цикла для выхода из него или для перехода в начало цикла, к следующей итерации. Инструкции<b>continue</b>и<b>break</b>являются единственными инструкциями в языке JavaScript, в которых можно указывать метки - о них подробнее рассказывается далее в этой главе. Ниже приводится пример инструкции<b>continue</b>с меткой и инструкции<b>while</b>, использующей эту метку:<b>continue</b><b>mainloop: while(token != null) {</b><b> // Программный код опущен...</b><b> continue mainloop; // Переход к следующей итерации именованного цикла </b><b> // Программный код опущен...</b><b>}</b>Идентификатор, используемый в качестве метки инструкции, может быть любым допустимым идентификатором JavaScript, кроме зарезервированного слова. Имена меток отделены от имен переменных и функций, поэтому в качестве меток допускается использовать идентификаторы, совпадающие с именами переменных или функций. Метки инструкций определены только внутри инструкций, к которым они применяются (и, конечно же, внутри вложенных в них инструкций). Вложенные инструкции не могут помечаться теми же идентификаторами, что и вмещающие их инструкции, но две независимые инструкции могут помечаться одинаковыми метками. Помеченные инструкции могут помечаться повторно. То есть любая инструкция может иметь множество меток.
5.6.2. Инструкция break
Инструкция
приводит к немедленному выходу из самого внутреннего цикла или инструкции<b>break</b>. Синтаксис ее прост:<b>switch</b><b>break;</b>Поскольку инструкция break приводит к выходу из цикла или инструкции
, такая форма<b>switch</b>допустима только внутри этих инструкций.<b>break</b>Выше мы уже видели примеры использования инструкции
внутри инструкции<b>break</b>. В циклах она обычно используется для немедленного выхода из цикла, когда по каким-либо причинам требуется завершить выполнение цикла. Когда цикл имеет очень сложное условие завершения, зачастую проще бывает реализовать эти условия с помощью инструкций<b>switch</b>, чем пытаться выразить их в одном условном выражении цикла. Следующий пример пытается отыскать элемент массива с определенным значением. Цикл завершается обычным образом по достижении конца массива или с помощью инструкции<b>break</b>, как только будет найдено искомое значение:<b>break</b><b>for(var і = 0; і < a.length; i++) { </b><b> if (a[і] == target) break;</b><b>}</b>В языке JavaScript допускается указывать имя метки за ключевым словом
(идентификатор без двоеточия):<b>break</b><b>break имя_метки;</b>Когда инструкция
используется с меткой, она выполняет переход в конец именованной инструкции или прекращение ее выполнения. В случае отсутствия инструкции с указанной меткой попытка использовать такую форму инструкций<b>break</b>порождает синтаксическую ошибку. Именованная инструкция не обязана быть циклом или инструкцией<b>break</b>: инструкция<b>switch</b>с меткой может выполнять «выход» из любой вмещающей ее инструкции. Объемлющая инструкция может даже быть простым блоком инструкций, заключенным в фигурные скобки исключительно с целью пометить его.<b>break</b>Между ключевым словом
и именем метки не допускается вставлять символ перевода строки. Дело в том, что интерпретатор JavaScript автоматически вставляет пропущенные точки с запятой: если разбить строку программного кода между ключевым словом break и следующей за ним меткой, интерпретатор предположит, что имелась в виду простая форма этой инструкции без метки, и добавит точку с запятой (раздел 2.5).<b>break</b>Инструкция
с меткой необходима, только когда требуется прервать выполнение инструкции, не являющейся ближайшим объемлющим циклом или инструкцией<b>break</b>. Следующий фрагмент демонстрирует это:<b>switch</b>