JavaScript. Подробное руководство, 6-е издание
Часть 50 из 535 Информация о книге
<b>else if (n == 2) {</b><b> // Выполнить блок 2</b><b>}</b><b>else if (n == 3) {</b><b> // Выполнить блок З</b><b>}</b><b>else {</b><b> // Если ни одна из предыдущих инструкций else не была выполнена, выполнить блок 4</b><b>}</b>В этом фрагменте нет ничего особенного. Это просто последовательность инструкций
, где каждая инструкция<b>if</b>является частью конструкции<b>if</b>предыдущей инструкции. Стиль else if предпочтительнее и понятнее записи в синтаксически эквивалентной форме, полностью показывающей вложенность инструкций:<b>else</b><b>if (n == 1) {</b><b> // Выполнить блок 1</b><b>}</b><b>else {</b><b> if (n == 2) {</b><b> // Выполнить блок 2</b><b> }</b><b> else {</b><b> if (n == 3) {</b><b> // Выполнить блок З</b><b> }</b><b> else {</b><b> // Если ни одна из предыдущих инструкций else // не была выполнена, выполнить блок 4</b><b> }</b><b> }</b><b>}</b>5.4.3. Инструкция switch
Инструкция
создает ветвление в потоке выполнения программы, а многопозиционное ветвление можно реализовать посредством нескольких инструкций<b>if</b>. Однако это не всегда наилучшее решение, особенно если все ветви зависят от значения одного и того же выражения. В этом случае расточительно повторно вычислять значение одного и того же выражения в нескольких инструкциях<b>else if</b>.<b>if</b>Инструкция
предназначена именно для таких ситуаций. За ключевым словом<b>switch</b>следует выражение в скобках и блок кода в фигурных скобках:<b>switch</b><b>switch(выражение) {</b><b> инструкции</b><b>}</b>Однако полный синтаксис инструкции
более сложен, чем показано здесь. Различные места в блоке помечены ключевым словом<b>switch</b>, за которым следует выражение и символ двоеточия. Ключевое слово<b>case</b>напоминает инструкцию с меткой за исключением того, что оно связывает инструкцию с выражением, а не с именем. Когда выполняется инструкция<b>case</b>, она вычисляет значение выражения, а затем ищет метку<b>switch</b>, соответствующую этому значению (соответствие определяется с помощью оператора идентичности<b>case</b>). Если метка найдена, выполняется блок кода, начиная с первой инструкции, следующей за меткой<b>===</b>. Если метка<b>case</b>с соответствующим значением не найдена, выполнение начинается с первой инструкции, следующей за специальной меткой<b>case</b>. Если метка<b>default:</b>отсутствует, блок инструкции<b>default:</b>пропускается целиком.<b>switch</b>Работу инструкции
сложно объяснить на словах, гораздо понятнее выглядит объяснение на примере. Следующая инструкция<b>switch</b>эквивалентна повторяющимся инструкциям<b>switch</b>, показанным в предыдущем разделе:<b>if/else</b><b>switch(n) {</b><b>case 1: // Выполняется, если п === 1</b><b> // Выполнить блок 1. </b><b> break; // Здесь остановиться </b><b>case 2: // Выполняется, если п === 2</b><b> // Выполнить блок 2. </b><b> break; // Здесь остановиться </b><b>case 3: // Выполняется, если п === 3</b><b> // Выполнить блок 3. </b><b> break; // Здесь остановиться</b><b>default: // Если все остальное не подходит...</b><b> // Выполнить блок 4. </b><b> break; // Здесь остановиться</b><b>}</b>Обратите внимание на ключевое слово
в конце каждого блока<b>break</b>. Инструкция<b>case</b>, описываемая далее в этой главе, приводит к передаче управления в конец инструкции<b>break</b>и продолжению выполнения инструкций, следующих далее. Конструкции<b>switch</b>в инструкции<b>case</b>задают только начальную точку выполняемого программного кода, но не задают никаких конечных точек. В случае отсутствия инструкций<b>switch</b>инструкция<b>break</b>начнет выполнение блока кода с меткой<b>switch</b>, соответствующей значению выражения, и продолжит выполнение инструкций до тех пор, пока не дойдет до конца блока. В редких случаях это полезно для написания программного кода, который переходит от одной метки<b>case</b>к следующей, но в 99% случаев следует аккуратно завершать каждый блок<b>case</b>инструкцией<b>case</b>. (При использовании<b>break</b>внутри функции вместо<b>switch</b>можно использовать инструкцию<b>break</b>. Обе эти инструкции служат для завершения работы инструкции<b>return</b>и предотвращения перехода к следующей метке case.)<b>switch</b>