From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../reference/statements/label/index.html | 182 +++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 files/uk/web/javascript/reference/statements/label/index.html (limited to 'files/uk/web/javascript/reference/statements/label') diff --git a/files/uk/web/javascript/reference/statements/label/index.html b/files/uk/web/javascript/reference/statements/label/index.html new file mode 100644 index 0000000000..b29fa8fb42 --- /dev/null +++ b/files/uk/web/javascript/reference/statements/label/index.html @@ -0,0 +1,182 @@ +--- +title: Мітка +slug: Web/JavaScript/Reference/Statements/label +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/Statements/label +--- +
{{jsSidebar("Statements")}}
+ +

Мітка (label) може використовуватися з операторами {{jsxref("Statements/break", "break")}} та {{jsxref("Statements/continue", "continue")}}. Вона додається попереду виразу у вигляді ідентифікатора, на який можна посилатися.

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

Заувага: Використання помічених циклів або блоків є дуже нестандартним підходом. Зазвичай використовуються виклики функцій замість стрибків у циклах.

+
+ +

Синтаксис

+ +
label :
+   statement
+
+ +
+
label
+
Будь-який ідентифікатор JavaScript, який не є зарезервованим словом.
+
statement
+
Інструкція JavaScript. Оператор break може використовуватися з будь-якою поміченою конструкцією, а оператор continue може використовуватися з поміченими циклами.
+
+ +

Опис

+ +

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

+ +

Зауважте, що у JavaScript немає оператора goto, ви можете використовувати мітки лише з break або continue.

+ +

У строгому режимі не можна використовувати "let" в якості імені мітки. Це спричинить викидання {{jsxref("SyntaxError")}} (let є зарезервованим ідентифікатором).

+ +

Приклади

+ +

Використання поміченого continue з циклами for

+ +
var i, j;
+
+loop1:
+for (i = 0; i < 3; i++) {      //Перший цикл for помічений як "loop1"
+   loop2:
+   for (j = 0; j < 3; j++) {   //Другий цикл for помічений як "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"
+
+ +

Використання поміченого оператора continue

+ +

Маючи масив елементів та масив тестів, цей приклад рахує кількість елементів, які пройшли усі тести.

+ +
var itemsPassed = 0;
+var 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++;
+}
+ +

Використання поміченого оператора break з циклами for

+ +
var i, j;
+
+loop1:
+for (i = 0; i < 3; i++) {      //Перший цикл for помічений як "loop1"
+   loop2:
+   for (j = 0; j < 3; j++) {   //Другий цикл for помічений як "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
+ +

Використання поміченого оператора break

+ +

Маючи масив елементів та масив тестів, цей приклад визначає, чи усі елементи пройшли усі тести.

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

Використання поміченого блоку з оператором break

+ +

Ви можете використовувати мітки всередині звичайних блоків, але тільки оператор 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
+
+ +

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

+ + + + + + + + + + +
Специфікація
{{SpecName('ESDraft', '#sec-labelled-statements', 'Labelled statement')}}
+ +

Сумісність з веб-переглядачами

+ + + +

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

+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf