Как добавить метку к идентификатору?

У JavaScript есть относительно неизвестная функциональность, которая позволяет нам идентифицировать цикл. После завершения идентификации мы можем использовать операторы break или continue, чтобы прервать цикл и продолжить его выполнение. .

Проще говоря, оператор метки предоставляет идентификатор для оператора, на который мы можем ссылаться.

Мы можем маркировать любые операторы, хотя это полезно только для тех операторов, у которых есть такие тела, как цикл и условия. Например, мы можем использовать операторы меток с break или continue. Таким образом, его можно использовать как альтернативу оператору goto, поскольку в JavaScript его нет.

label :  statement

label - Любой идентификатор JavaScript, не являющийся зарезервированным словом.
инструкция - инструкция JavaScript. «Break» можно использовать с любым помеченным оператором, а «continue» можно использовать с циклом помеченных операторов.

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

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

var loop1, loop2;
outerLoop:
for (loop1 = 0; loop1 <= 2; loop1++) {      
//"outerLoop" for statement
   innerLoop:
   for (loop2 = 0; loop2 <= 2; loop2++) {   
//"innerLoop" for statement
      if (loop1 === 1 && loop2 === 1) {
         continue outerLoop;
      }
      console.log('loop1 = ' + loop1 + ', loop2 = ' + loop2);
   }
}
// Output -->
loop1 = 0, loop2 = 0
loop1 = 0, loop2 = 1
loop1 = 0, loop2 = 2
loop1 = 1, loop2 = 0
loop1 = 2, loop2 = 0
loop1 = 2, loop2 = 1
loop1 = 2, loop2 = 2
// Notice how it skips both "loop1 = 1, loop2 = 1" and "loop1 = 1, loop2 = 2"

Использование циклов For с помеченным разрывом

var loop1, loop2;
outerLoop:
for (loop1 = 0; loop1 <= 2; loop1++) {      //The first for statement is labeled "outerLoop"
   innerLoop:
   for (loop2 = 0; loop2 <= 2; loop2++) {   //The second for statement is labeled "innerLoop"
      if (loop1 === 1 && loop2 === 1) {
         break outerLoop;
      }
      console.log('loop1 = ' + loop1 + ', loop2 = ' + loop2);
   }
}
// Output is ->
loop1 = 0, loop2 = 0
loop1 = 0, loop2 = 1
loop1 = 0, loop2 = 2
loop1 = 1, loop2 = 0

Использование оператора Break с помеченным блоком

breakLabel: {
  console.log('Inside Break Label');
  break breakLabel;
  console.log('this will not be executed');
}
console.log('Outside Break Label');
// Output -->
Inside Break Label
Outside Break Label

Использование помеченных объявлений функций

Мы можем использовать метки в простых блоках, но только операторы break могут использовать метки без цикла.

functionLabel : function doSomething() {}
In strict mode code, however, this will throw a SyntaxError:
'use strict';
functionLabel: function doSomething() {}
// SyntaxError: functions cannot be labelled

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

использованная литература

МДН