break
=====

L'instruction **`break`** permet de terminer la boucle en cours ou l'instruction `switch` ou `label` en cours et de passer le contrôle du programme à l'instruction suivant l'instruction terminée.

Exemple interactif
------------------

Syntaxe
-------


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


`label` Facultatif

Un identifiant optionnel associé avec l'étiquette (*label*) de l'instruction. Si l'instruction à terminer n'est pas une boucle ou une instruction `switch`, ce paramètre est nécessaire.

Description
-----------

L'instruction `break` peut être utilisée avec une étiquette (*label*) optionnelle qui permet d'interrompre une instruction étiquetée. L'instruction `break` doit être imbriquée au sein de l'instruction référencée. L'instruction étiquetée peut correspondre à n'importe quel instruction de bloc ; il n'est pas nécessaire qu'elle soit précédée par une instruction de boucle.

Une instruction `break`, suivie ou non d'une étiquette, ne peut pas être utilisée dans le corps d'une fonction appartenant elle-même à une boucle, à une instruction `Instructions/switch` ou à une instruction `label`.

Exemples
--------

### Exemple simple utilisant `break`

La fonction qui suit utilise une instruction `break` qui interrompt la boucle `while` lorsque `i` vaut 3, grâce à l'instruction qui suit, la fonction renvoie 3 \* `x`.


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

  while (i < 6) {
    if (i == 3) {
      break;
    }
    i += 1;
  }
  return i \* x;
}
```

### Utiliser `break` avec les labels

Dans le code suivant, on utilise les instructions `break` avec des blocs étiquetés. Une instruction `break` doit être présente à l'intérieur du bloc auquel elle fait référence. Ici, on voit que `bloc_interne` est compris dans `bloc_externe`.


```js
bloc\_externe: {
  bloc\_interne: {
    console.log("1");
    break bloc_externe; // interrompt bloc\_externe ET bloc\_interne
    console.log(":-("); // ignoré
  }

  console.log("2"); // ignoré
}
```


Dans le code qui suit, on utilise également des instructions `break` avec des blocs étiquetés mais on obtient une exception `SyntaxError` car l'instruction `break` au sein de `bloc_1` référence `bloc_2`, or `bloc_1` n'est pas compris dans `bloc_2` :


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

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

### Utiliser `break` dans des fonctions imbriquées dans des boucles

Dans le cas d'une fonction imbriquée dans une boucle `while` :


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


Dans le cas d'une fonction imbriquée dans une instruction `label` :


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

Spécifications
--------------

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

Compatibilité des navigateurs
-----------------------------

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

Voir aussi
----------

* `continue`
* `label`
* `switch`