--- title: Метка slug: Web/JavaScript/Reference/Statements/label tags: - JavaScript - Возможности языка - Метка translation_of: Web/JavaScript/Reference/Statements/label browser-compat: javascript.statements.label ---
Метки используются вместе с операторами {{jsxref("Statements/break", "break")}} и {{jsxref("Statements/continue", "continue")}}. Они выступают в роли идентификатора выражения, на который можно сослаться.
label : statement
labelstatementbreak можно использоваться любое блочное выражение,
    а с continue только циклы.Вы можете использовать метки для обозначения циклов, чтобы затем при помощи break
  или continue выходить из цикла или продолжать его работу
  с новой итерации соответственно.
Обратите внимание, в JavaScript отсутствует оператор goto,
  вы можете использовать метки только с break или continue.
В строгом режиме
  использование слова "let" в качестве имени метки запрещено — вы получите ошибку {{jsxref("SyntaxError")}}
  (потому что let является ключевым словом в новых стандартах JavaScript).
let i, j;
loop1:
for (i = 0; i < 3; i++) {      //Первый цикл, обозначенный меткой "loop1"
   loop2:
   for (j = 0; j < 3; j++) {   //Второй цикл, обозначенный меткой "loop2"
      if (i === 1 && j === 1) {
         continue loop1;
      }
      console.log('i = ' + i + ', j = ' + j);
   }
}
// Вывод:
//   "i = 0, j = 0"
//   "i = 0, j = 1"
//   "i = 0, j = 2"
//   "i = 1, j = 0"
//   "i = 2, j = 0"
//   "i = 2, j = 1"
//   "i = 2, j = 2"
// Обратите внимание на пропуск "i = 1, j = 1" и "i = 1, j = 2"
В примере по массиву элементов и массиву тест-функций вычисляется количество элементов, которые проходят все тесты.
let itemsPassed = 0;
let i, j;
top:
for (i = 0; i < items.length; i++) {
  for (j = 0; j < tests.length; j++) {
    if (!tests[j].pass(items[i])) {
      continue top;
    }
  }
  itemsPassed++;
}
let i, j;
loop1:
for (i = 0; i < 3; i++) {      //Первый цикл, обозначенный меткой "loop1"
   loop2:
   for (j = 0; j < 3; j++) {   //Второй цикл, обозначенный меткой "loop2"
      if (i === 1 && j === 1) {
         break loop1;
      }
      console.log('i = ' + i + ', j = ' + j);
   }
}
// Вывод:
//   "i = 0, j = 0"
//   "i = 0, j = 1"
//   "i = 0, j = 2"
//   "i = 1, j = 0"
// Обратите внимание на разницу результатов в аналогичном примере с continue
В примере по массиву элементов и массиву тест-функций определяется, все ли элементы проходят все тесты.
let allPass = true;
let i, j;
top:
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.
foo: {
  console.log('привет');
  break foo;
  console.log('эта строка не будет исполнена');
}
console.log('мир');
// Вывод:
//   "привет"
//   "мир"
Начиная с ECMAScript 2015, объявление функции с меткой допускается только в обычном режиме для совместимости с этой нестандартной, но реализованной в некоторых браузерах, возможностью.
L: function F() {}
Однако в строгом режиме такой код вызовет ошибку {{jsxref("SyntaxError")}}:
'use strict';
L: function F() {}
// SyntaxError: functions cannot be labelled
Объявление функций-генераторов с меткой не допускается ни в обычном, ни в строгом режимах:
L: function* F() {}
// SyntaxError: generator functions cannot be labelled
{{Compat}}