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