--- title: break slug: Web/JavaScript/Reference/Instructions/break tags: - JavaScript - Reference - Statement translation_of: Web/JavaScript/Reference/Statements/break ---
L'instruction break
permet de terminer la boucle en cours ou l'instruction {{jsxref("Instructions/switch", "switch")}} ou {{jsxref("Instructions/label", "label")}} en cours et de passer le contrôle du programme à l'instruction suivant l'instruction terminée.
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
break [label];
label
{{optional_inline}}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 {{jsxref("Instructions/bloc", "bloc","",1)}} ; 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 {{jsxref("Instructions/switch")}} ou à une instruction label
.
break
La fonction qui suit utilise une instruction break
qui interrompt la boucle {{jsxref("Instructions/while", "while")}} lorsque i
vaut 3, grâce à l'instruction qui suit, la fonction renvoie 3 * x
.
function testBreak(x) { var i = 0; while (i < 6) { if (i == 3) { break; } i += 1; } return i * x; }
break
avec les labelsDans 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
.
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
:
bloc_1: { console.log ('1'); break bloc_2; // SyntaxError: label not found } bloc_2: { console.log ('2'); }
break
dans des fonctions imbriquées dans des bouclesDans le cas d'une fonction imbriquée dans une boucle while
:
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
:
bloc_1: { console.log('1'); (function() { break bloc_1; // SyntaxError: Undefined label 'bloc_1' })(); }
Spécification | Statut | Commentaires |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Définition initiale. Version non étiquetée. |
{{SpecName('ES3')}} | {{Spec2('ES3')}} | Version étiquetée ajoutée. |
{{SpecName('ES5.1', '#sec-12.8', 'instruction break')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-break-statement', 'instruction break')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-break-statement', 'Break statement')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.statements.break")}}