aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/statements/break/index.html
blob: 83dd2cd1c20cb1e9c56e7731e0ae4a703133ae16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
---
title: break
slug: Web/JavaScript/Reference/Statements/break
tags:
  - JavaScript
  - Возможности языка
  - Справочник
  - Оператор
translation_of: Web/JavaScript/Reference/Statements/break
browser-compat: javascript.statements.break
---
<div>{{jsSidebar("Statements")}}</div>

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

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

<h2 id="Syntax">Синтаксис</h2>

<pre class="brush: js">break [<var>label</var>];</pre>

<dl>
  <dt><code><var>label</var></code> {{optional_inline}}</dt>
  <dd>Идентификатор связанной метки. Если прерываемое выражение не цикл или {{jsxref("Statements/switch", "switch")}}, указание метки обязательно.</dd>
</dl>

<h2 id="Description">Описание</h2>

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

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

<h2 id="Examples">Примеры</h2>

<h3 id="break_in_while_loop">break в цикле while</h3>

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

<pre class="brush: js highlight:[6];">function testBreak(x) {
  var i = 0;

  while (i &lt; 6) {
    if (i == 3) {
      break;
    }
    i += 1;
  }

  return i * x;
}</pre>

<h3 id="break_in_switch_statements">break в конструкции switch</h3>

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

<pre class="brush: js highlight:[6];">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;
}
</pre>

<h3 id="break_in_labeled_blocks">break в блочном выражении с указанной меткой</h3>

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

<pre class="brush: js highlight:[1,2,4];">outer_block: {
  inner_block: {
    console.log('1');
    break outer_block; // break прервёт выполнение кода как в inner_block, так и в outer_block
    console.log(':-('); // не будет выполнено
  }
  console.log('2'); // не будет выполнено
}
</pre>

<h3 id="break_in_labeled_blocks_that_throw">break вне блочного выражения с указанной меткой</h3>

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

<pre class="brush: js highlight:[1,3,6];">block_1: {
  console.log('1');
  break block_2; // SyntaxError: label not found
}

block_2: {
  console.log('2');
}
</pre>

<h3 id="break_within_functions">break внутри функций</h3>

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

<pre class="brush: js highlight:[1,3,6];">function testBreak(x) {
  var i = 0;

  while (i &lt; 6) {
    if (i == 3) {
      (function() {
        break;
      })();
    }
    i += 1;
  }

return i * x;
}

testBreak(1); // SyntaxError: Illegal break statement
</pre>

<pre class="brush: js highlight:[1,3,6];">block_1: {
  console.log('1');
  ( function() {
    break block_1; // SyntaxError: Undefined label 'block_1'
  })();
}
</pre>

<h2 id="Specifications">Спецификации</h2>

{{Specifications}}

<h2 id="Browser_compatibility">Совместимость с браузерами</h2>

<p>{{Compat}}</p>

<h2 id="See_also">Смотрите также</h2>

<ul>
  <li>{{jsxref("Statements/continue", "continue")}}</li>
  <li>{{jsxref("Statements/label", "label", "", 1)}}</li>
  <li>{{jsxref("Statements/switch", "switch")}}</li>
</ul>