From b71c38627384556f08375630e969577dcbe616b0 Mon Sep 17 00:00:00 2001 From: Sasha Sushko Date: Fri, 4 Jun 2021 08:54:47 +0300 Subject: RU: Update label statement page (#920) Co-authored-by: Artem Shibakov --- .../reference/statements/label/index.html | 185 +++++++++++---------- 1 file changed, 96 insertions(+), 89 deletions(-) (limited to 'files/ru/web') diff --git a/files/ru/web/javascript/reference/statements/label/index.html b/files/ru/web/javascript/reference/statements/label/index.html index 129afe8d3f..aa0b01ea33 100644 --- a/files/ru/web/javascript/reference/statements/label/index.html +++ b/files/ru/web/javascript/reference/statements/label/index.html @@ -1,57 +1,62 @@ --- -title: label +title: Метка slug: Web/JavaScript/Reference/Statements/label tags: - JavaScript - - Statement + - Возможности языка - Метка translation_of: Web/JavaScript/Reference/Statements/label +browser-compat: javascript.statements.label ---
{{jsSidebar("Statements")}}
-

Инструкция метки (label) используется вместе с {{jsxref("Statements/break", "break")}} или {{jsxref("Statements/continue", "continue")}} для альтернативного выхода из цикла. Оно добавляется перед блочным выражением в качестве ссылки, которая может быть использована в дальнейшем.

+

Метки используются вместе с операторами {{jsxref("Statements/break", + "break")}} и {{jsxref("Statements/continue", "continue")}}. Они выступают + в роли идентификатора выражения, на который можно сослаться.

-

{{EmbedInteractiveExample("pages/js/statement-label.html")}}

+
{{EmbedInteractiveExample("pages/js/statement-label.html")}}
-
-

Примечание: Помеченные циклы используются очень редко. Обычно вместо этого используют вызов функций.

-
+

Синтаксис

-

Синтаксис

- -
label :
-   statement
+
label :
+  statement
 
-
label
-
Любой идентификатор JavaScript, который не является ключевым словом.
-
statement
-
Инструкция. break может быть использован с любой отмеченной инструкцией, а continue только с метками около начала цикла.
+
label
+
Идентификатор. Любое слово, кроме ключевых и зарезервированных в JavaScript.
+
statement
+
Выражение. С break можно использоваться любое блочное выражение, + а с continue только циклы.
-

Описание

+

Описание

-

Вы можете применять метки для обозначения циклов, чтобы затем при помощи break или continue выходить из цикла или продолжать его работу с новой итерации.

+

Вы можете использовать метки для обозначения циклов, чтобы затем при помощи break + или continue выходить из цикла или продолжать его работу + с новой итерации соответственно.

-

В JavaScript нет оператора goto, вы можете использовать только метки с break или continue.

+

Обратите внимание, в JavaScript отсутствует оператор goto, + вы можете использовать метки только с break или continue.

-

В строгом режиме вы не можете использовать "let" как имя метки. Это генерирует ошибку {{jsxref("SyntaxError")}} (let is a reserved identifier).

+

В строгом режиме + использование слова "let" в качестве имени метки запрещено — вы получите ошибку {{jsxref("SyntaxError")}} + (потому что let является ключевым словом в новых стандартах JavaScript).

-

Примеры

+

Примеры

-

Использование метки с continue с циклом for

+

Использование метки с оператором continue в цикле

-
var i, j;
+
let i, j;
 
 loop1:
 for (i = 0; i < 3; i++) {      //Первый цикл, обозначенный меткой "loop1"
    loop2:
    for (j = 0; j < 3; j++) {   //Второй цикл, обозначенный меткой "loop2"
-      if (i == 1 && j == 1) {
+      if (i === 1 && j === 1) {
          continue loop1;
       }
-      console.log("i = " + i + ", j = " + j);
+      console.log('i = ' + i + ', j = ' + j);
    }
 }
 
@@ -66,12 +71,13 @@ for (i = 0; i < 3; i++) {      //Первый цикл, обозначенн
 // Обратите внимание на пропуск "i = 1, j = 1" и "i = 1, j = 2"
 
-

Другой пример использования метки с continue

+

Другой пример использования метки с continue

-

На входе массив элементов и массив функций для проверки, в примере вычисляется количество элементов массива, которые проходят все тесты.

+

В примере по массиву элементов и массиву тест-функций вычисляется количество элементов, + которые проходят все тесты.

-
var itemsPassed = 0;
-var i, j;
+
let itemsPassed = 0;
+let i, j;
 
 top:
 for (i = 0; i < items.length; i++) {
@@ -82,20 +88,20 @@ for (i = 0; i < items.length; i++) {
   }
 
   itemsPassed++;
-}
+}
-

Использование меток с break

+

Использование метки с оператором break в цикле

-
var i, j;
+
let i, j;
 
 loop1:
 for (i = 0; i < 3; i++) {      //Первый цикл, обозначенный меткой "loop1"
    loop2:
    for (j = 0; j < 3; j++) {   //Второй цикл, обозначенный меткой "loop2"
-      if (i == 1 && j == 1) {
+      if (i === 1 && j === 1) {
          break loop1;
       }
-      console.log("i = " + i + ", j = " + j);
+      console.log('i = ' + i + ', j = ' + j);
    }
 }
 
@@ -104,76 +110,77 @@ for (i = 0; i < 3; i++) {      //Первый цикл, обозначенн
 //   "i = 0, j = 1"
 //   "i = 0, j = 2"
 //   "i = 1, j = 0"
-// Обратите внимание на аналогичный пример с continue
+// Обратите внимание на разницу результатов в аналогичном примере с continue
-

Другой пример использования меток с break

+

Другой пример использования метки с break

-

Дан массив элементов и массив с функциями для проверки, в примере определяется, проходят ли все элементы первого массива все тесты из второго массива.

+

В примере по массиву элементов и массиву тест-функций определяется, все ли элементы + проходят все тесты.

-
var allPass = true;
-var i, j;
+
let allPass = true;
+let i, j;
 
 top:
-for (i = 0; items.length; i++)
-  for (j = 0; j < tests.length; i++)
-    if (!tests[j].pass(items[i])){
+for (i = 0; i < items.length; i++) {
+  for (j = 0; j < tests.length; j++) {
+    if (!tests[j].pass(items[i])) {
       allPass = false;
       break top;
-    }
+ } + } +}
-

Помеченные объявления функция

+

Использование метки для блочного выражения с break

-

Начиная с ECMAScript 2015, помеченные объявления функция являются стандартными для нестрогого режима.

+

Метки можно использовать для обычных блоков кода, но только с оператором break.

-
L: function F() {}
+
foo: {
+  console.log('привет');
+  break foo;
+  console.log('эта строка не будет исполнена');
+}
+console.log('мир');
+
+// Вывод:
+//   "привет"
+//   "мир"
+ +

Объявление функций с меткой

-

Однако, в строгом режиме генерируется ошибка {jsxref("SyntaxError")}}:

+

Начиная с ECMAScript 2015, объявление функции с меткой допускается + только в обычном режиме + для совместимости с этой нестандартной, но реализованной в некоторых браузерах, возможностью.

-

In strict mode code, however, this will throw a {{jsxref("SyntaxError")}}:

+
L: function F() {}
+ +

Однако в строгом режиме + такой код вызовет ошибку {{jsxref("SyntaxError")}}:

-
'use strict';
+
'use strict';
 L: function F() {}
-// SyntaxError: functions cannot be labelled
- -

Функции-генераторы не могут быть помечены ни в том, ни в другом режиме:

- -
L: function* F() {}
-// SyntaxError: generator functions cannot be labelled
- -

Спецификации

- - - - - - - - - - - - - - - - - - - - - - - - -
СпецификацияСтатусКомментарии
ECMAScript 3-е Издание.СтандартИзначальное определение. Реализован в JavaScript 1.2.
{{SpecName('ES5.1', '#sec-12.12', 'Labelled statement')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-labelled-statements', 'Labelled statement')}}{{Spec2('ES6')}}
- -

Совместимость с браузерами

- -

{{Compat("javascript.statements.label")}}

- -

Смотрите также

+// SyntaxError: functions cannot be labelled
+ +

Объявление функций-генераторов + с меткой не допускается ни в обычном, ни в строгом режимах:

+ +

+ +
L: function* F() {}
+// SyntaxError: generator functions cannot be labelled
+
+ +

Спецификации

+ +{{Specifications}} + +

Совместимость с браузерами

+ +

{{Compat}}

+ +

Смотрите также

    -
  • {{jsxref("Statements/break", "break")}}
  • -
  • {{jsxref("Statements/continue", "continue")}}
  • +
  • {{jsxref("Statements/break", "break")}}
  • +
  • {{jsxref("Statements/continue", "continue")}}
-- cgit v1.2.3-54-g00ecf