JavaScript. Подробное руководство, 6-е издание
Часть 55 из 535 Информация о книге
<b>var matrix = getData(); // Получить 2-мерный массив чисел откуда-нибудь </b><b>// Найти сумму всех чисел в матрице, </b><b>var sum = 0, </b><b>success = false;</b><b>// Пометить инструкцию, выполнение которой требуется прервать в случае ошибки </b><b>compute_sum: if (matrix) {</b><b> for(var x = 0; x < matrix.length; x++) { </b><b> var row = matrix[x]; </b><b> if (!row) break compute_sum; </b><b> for(var у = 0; у < row.length; y++) { </b><b> var cell = row[y]; </b><b> if (isNaN(cell)) break compute_sum; </b><b> sum += cell;</b><b> }</b><b> }</b><b> success = true;</b><b>}</b><b>// Здесь инструкция break выполняет переход. Если будет выполнено условие </b><b>// success == false, значит, что-то не так в полученной матрице.</b><b>// В противном случае переменная sum будет содержать сумму всех элементов матрицы.</b>Наконец, обратите внимание, что инструкция
, с меткой или без нее, не может передавать управление через границы функций. Например, нельзя пометить инструкцию объявления функции и затем использовать эту метку внутри функции.<b>break</b>5.6.3. Инструкция continue
Инструкция
схожа с инструкцией<b>continue</b>. Однако вместо выхода из цикла инструкция<b>break</b>запускает новую итерацию цикла. Синтаксис инструкции<b>continue</b>столь же прост, как и синтаксис инструкции<b>continue</b>:<b>break</b><b>continue;</b>Инструкция
может также использоваться с меткой:<b>continue</b><b>continue имя_метки\</b>Инструкция
, как в форме без метки, так и с меткой, может использоваться только в теле цикла. Использование ее в любых других местах приводит к синтаксической ошибке.<b>continue</b>Когда выполняется инструкция
, текущая итерация цикла прерывается и начинается следующая. Для разных типов циклов это означает разное:<b>continue</b>• В цикле
указанное в начале цикла выражение проверяется снова, и если оно равно<b>while</b>, тело цикла выполняется с начала.<b>true</b>• В цикле
происходит переход в конец цикла, где перед повторным выполнением цикла снова проверяется условие.<b>do/while</b>• В цикле
вычисляется выражение инкремента и снова вычисляется выражение проверки, чтобы определить, следует ли выполнять следующую итерацию.<b>for</b>• В цикле
цикл начинается заново с присвоением указанной переменной имени следующего свойства.<b>for/in</b>Обратите внимание на различия в поведении инструкции
в циклах<b>continue</b>и<b>while</b>: цикл<b>for</b>возвращается непосредственно к своему условию, а цикл<b>while</b>сначала вычисляет выражение инкремента, а затем возвращается к условию. Ранее при обсуждении цикла<b>for</b>объяснялось поведение цикла<b>for</b>в терминах «эквивалентного» цикла<b>for</b>. Поскольку инструкция<b>while</b>ведет себя в этих двух циклах по-разному, точно имитировать цикл<b>continue</b>с помощью одного цикла<b>for</b>невозможно.<b>while</b>В следующем примере показано использование инструкции
без метки для выхода из текущей итерации цикла в случае ошибки:<b>continue</b><b>for(i = 0; 1 < data.length; i++) {</b><b> if (!data[і]) continue; // He обрабатывать неопределенные данные</b><b> total += data[i];</b><b>}</b>Инструкция
, как и<b>continue</b>, может применяться во вложенных циклах в форме, включающей метку, и тогда заново запускаемым циклом необязательно будет цикл, непосредственно содержащий инструкцию<b>break</b>. Кроме того, как и для инструкции<b>continue</b>, переводы строк между ключевым словом continue и именем метки не допускаются.<b>break</b>5.6.4. Инструкция return
Как вы помните, вызов функции является выражением и подобно всем выражениям имеет значение. Инструкция
внутри функций служит для определения значения, возвращаемого функцией. Инструкция<b>return</b>имеет следующий синтаксис:<b>return</b><b>return выражение;</b>Инструкция
может располагаться только в теле функции. Присутствие ее в любом другом месте является синтаксической ошибкой. Когда выполняется инструкция<b>return</b>, функция возвращает значение выражения вызывающей программе. Например:<b>return</b>