break
=====

**Оператор `break`** прерывает выполнение текущего цикла, оператора множественного выбора `switch` или блочного выражения с меткой. Выполнение кода продолжается с конструкции, следующей за прерванной.

Интерактивный пример
--------------------

Синтаксис
---------


```js
break [label];
```


`label` Необязательный

Идентификатор связанной метки. Если прерываемое выражение не цикл или `switch`, указание метки обязательно.

Описание
--------

С помощью оператора `break` можно прервать выполнение блочного выражения с меткой. В таком случае `break` должен находиться внутри блока кода с указанной меткой. Само блочное выражение может быть любым, а не только циклом.

Использование `break`, с меткой или без, невозможно внутри функции, которая вложена в прерываемые цикл, конструкцию `switch` или блочное выражение с меткой.

Примеры
-------

### break в цикле while

Следующая функция использует оператор `break` для выхода из цикла `while`, когда `i` станет равно 3, и возвращает значение 3 \* `x`.


```js
function testBreak(x) {
  var i = 0;

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

  return i \* x;
}
```

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

В примере оператор `break` прервёт выполнение `switch` сразу после выполнения кода в совпавшем `case`.


```js
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`.


```js
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` обязательно должен быть вложен в блок кода с меткой, выполнение которого требуется прервать.


```js
block\_1: {
  console.log('1');
  break block_2; // SyntaxError: label not found
}

block\_2: {
  console.log('2');
}
```

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

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


```js
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
```



```js
block\_1: {
  console.log('1');
  ( function() {
    break block_1; // SyntaxError: Undefined label 'block\_1'
  })();
}
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-break-statement |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `continue`
* label
* `switch`