From 0e36c54a3d34633b5bdd5df08880212d1f9091c6 Mon Sep 17 00:00:00 2001 From: Sasha Sushko Date: Thu, 27 May 2021 22:41:17 +0300 Subject: RU: Update break statement page (#917) * RU: Update break statement page * Apply suggestions from code review Co-authored-by: Alexander Myshov Co-authored-by: Alexander Myshov --- .../reference/statements/break/index.html | 194 ++++++++++++++------- 1 file changed, 131 insertions(+), 63 deletions(-) (limited to 'files/ru') diff --git a/files/ru/web/javascript/reference/statements/break/index.html b/files/ru/web/javascript/reference/statements/break/index.html index cd782dce4b..83dd2cd1c2 100644 --- a/files/ru/web/javascript/reference/statements/break/index.html +++ b/files/ru/web/javascript/reference/statements/break/index.html @@ -3,90 +3,158 @@ title: break slug: Web/JavaScript/Reference/Statements/break tags: - JavaScript - - Statement + - Возможности языка + - Справочник + - Оператор translation_of: Web/JavaScript/Reference/Statements/break +browser-compat: javascript.statements.break ---
{{jsSidebar("Statements")}}
-

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

+

Оператор break прерывает выполнение текущего цикла, + оператора множественного выбора {{jsxref("Statements/switch", "switch")}} или блочного {{jsxref("Statements/label", "выражения с меткой", "", 1)}}. + Выполнение кода продолжается с конструкции, следующей за прерванной.

-

 

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

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

+

Синтаксис

- - -

Синтаксис

- -
break [label];
+
break [label];
-
label
-
Опционально. Идентификатор связанной метки. Если прерываемое выражение не цикл или {{jsxref("Statements/switch", "switch")}}, метка является обязательной.
+
label {{optional_inline}}
+
Идентификатор связанной метки. Если прерываемое выражение не цикл или {{jsxref("Statements/switch", "switch")}}, указание метки обязательно.
-

Описание

+

Описание

+ +

С помощью оператора break можно прервать выполнение {{jsxref("Statements/block", "блочного выражения", "", 1)}} с меткой. + В таком случае break должен находиться внутри блока кода с указанной меткой. Само блочное выражение может быть любым, а не только циклом.

+ +

Использование break, с меткой или без, невозможно внутри функции, + которая вложена в прерываемые цикл, конструкцию {{jsxref("Statements/switch", "switch")}} + или {{jsxref("Statements/block", "блочное выражение", "", 1)}} с меткой.

+ +

Примеры

-

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

+

break в цикле while

-

Пример

+

Следующая функция использует оператор break для выхода из цикла + {{jsxref("Statements/while", "while")}}, когда i станет равно 3, и возвращает + значение 3 * x.

-

Следующая функция использует инструкцию break для выхода из цикла {{jsxref("Statements/while", "while")}}, когда i станет равно 3, и возвращает значение 3 * x.

+
function testBreak(x) {
+  var i = 0;
 
-
function testBreak(x) {
-   var i = 0;
+  while (i < 6) {
+    if (i == 3) {
+      break;
+    }
+    i += 1;
+  }
 
-   while (i < 6) {
-      if (i == 3) {
-         break;
-      }
-      i += 1;
-   }
-   return i * x;
+  return i * x;
 }
-

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
СпецификацияСтатусКомментарии
ECMAScript 1-е Издание.СтандартИзначальное определение. Версия без метки.
ECMAScript 3-е Издание.СтандартДобавлена поддержка метки.
{{SpecName('ES5.1', '#sec-12.8', 'Break statement')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-break-statement', 'Break statement')}}{{Spec2('ES6')}} 
- -

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

+

break в конструкции switch

+ +

В примере оператор break прервёт выполнение {{jsxref("Statements/switch", "switch")}} + сразу после выполнения кода в совпавшем case.

+ +
const food = "sushi";
+
+switch (food) {
+  case "sushi":
+    console.log("Sushi is originally from Japan.");
+    break;
+  case "pizza":
+    console.log("Pizza is originally from Italy.");
+    break;
+  default:
+    console.log("I have never heard of that dish.");
+    break;
+}
+
+ +

break в блочном выражении с указанной меткой

+ +

В примере используется оператор break с меткой. В таком случае break + обязательно должен быть вложен в блок кода с той же меткой. Обратите внимание, + что inner_block вложен в outer_block.

+ +
outer_block: {
+  inner_block: {
+    console.log('1');
+    break outer_block; // break прервёт выполнение кода как в inner_block, так и в outer_block
+    console.log(':-('); // не будет выполнено
+  }
+  console.log('2'); // не будет выполнено
+}
+
+ +

break вне блочного выражения с указанной меткой

+ +

В примере также используется break с меткой, + но код будет выполнен с ошибкой SyntaxError, + потому что break находится в блоке с меткой block_1, + а прерывается выполнение блока кода с меткой block_2. + Ещё раз, в таком случае break обязательно должен быть вложен в блок кода с меткой, + выполнение которого требуется прервать.

+ +
block_1: {
+  console.log('1');
+  break block_2; // SyntaxError: label not found
+}
+
+block_2: {
+  console.log('2');
+}
+
+ +

break внутри функций

+ +

Код в примерах также будет выполнен с ошибкой SyntaxError, + потому что в обоих случаях break находится в теле функции, вложенной в прерываемый цикл + или прерываемое блочное выражение с меткой.

+ +
function testBreak(x) {
+  var i = 0;
+
+  while (i < 6) {
+    if (i == 3) {
+      (function() {
+        break;
+      })();
+    }
+    i += 1;
+  }
+
+return i * x;
+}
+
+testBreak(1); // SyntaxError: Illegal break statement
+
+ +
block_1: {
+  console.log('1');
+  ( function() {
+    break block_1; // SyntaxError: Undefined label 'block_1'
+  })();
+}
+
+ +

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

+ +{{Specifications}} + +

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

{{Compat}}

-

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

+

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

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