--- title: break slug: Web/JavaScript/Reference/Statements/break tags: - JavaScript - Reference - Statement translation_of: Web/JavaScript/Reference/Statements/break original_slug: Web/JavaScript/Reference/Instructions/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.
breakLa 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")}}