aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/instructions/break/index.html
blob: bc3a1c12dfe502738d8df85a586a801d114b6a5a (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
---
title: break
slug: Web/JavaScript/Reference/Instructions/break
tags:
  - JavaScript
  - Reference
  - Statement
translation_of: Web/JavaScript/Reference/Statements/break
---
<div>{{jsSidebar("Statements")}}</div>

<p>L'instruction <strong><code>break</code></strong> 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.</p>

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

<p class="hidden">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 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> et à envoyer une <em>pull request</em> !</p>

<h2 id="Syntaxe">Syntaxe</h2>

<pre class="syntaxbox"><code>break [label];</code></pre>

<dl>
 <dt><code>label</code> {{optional_inline}}</dt>
 <dd>Un identifiant optionnel associé avec l'étiquette (<em>label</em>) de l'instruction. Si l'instruction à terminer n'est pas une boucle ou une instruction {{jsxref("Instructions/switch", "switch")}}, ce paramètre est nécessaire.</dd>
</dl>

<h2 id="Description">Description</h2>

<p>L'instruction <code>break</code> peut être utilisée avec une étiquette (<em>label</em>) optionnelle qui permet d'interrompre une instruction étiquetée. L'instruction <code>break</code> 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.</p>

<p>Une instruction <code>break</code>, 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 <code>label</code>.</p>

<h2 id="Exemples">Exemples</h2>

<h3 id="Exemple_simple_utilisant_break">Exemple simple utilisant <code>break</code></h3>

<p>La fonction qui suit utilise une instruction <code>break</code> qui interrompt la boucle {{jsxref("Instructions/while", "while")}} lorsque <code>i</code> vaut 3, grâce à l'instruction qui suit, la fonction renvoie 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="Utiliser_break_avec_les_labels">Utiliser <code>break</code> avec les labels</h3>

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

<pre class="brush:js;highlight:[1,3,5];">bloc_externe: {

  bloc_interne: {
    console.log ('1');
    break bloc_externe;  // interrompt bloc_externe ET bloc_interne
    console.log (':-('); // ignoré
  }

  console.log ('2');     // ignoré
}
</pre>

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

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

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

<h3 id="Utiliser_break_dans_des_fonctions_imbriquées_dans_des_boucles">Utiliser <code>break</code> dans des fonctions imbriquées dans des boucles</h3>

<p>Dans le cas d'une fonction imbriquée dans une boucle <code>while</code> :</p>

<pre class="brush: js">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>

<p>Dans le cas d'une fonction imbriquée dans une instruction <code>label</code> :</p>

<pre class="brush: js">bloc_1: {
  console.log('1');
  (function() {
    break bloc_1; // SyntaxError: Undefined label 'bloc_1'
  })();
}</pre>

<h2 id="Spécifications">Spécifications</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Spécification</th>
   <th scope="col">Statut</th>
   <th scope="col">Commentaires</th>
  </tr>
  <tr>
   <td>{{SpecName('ES1')}}</td>
   <td>{{Spec2('ES1')}}</td>
   <td>Définition initiale. Version non étiquetée.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES3')}}</td>
   <td>{{Spec2('ES3')}}</td>
   <td>Version étiquetée ajoutée.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-12.8', 'instruction break')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td> </td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-break-statement', 'instruction break')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td> </td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-break-statement', 'Break statement')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>

<div class="hidden">Ce tableau de compatibilité a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div>

<p>{{Compat("javascript.statements.break")}}</p>

<h2 id="Voir_aussi">Voir aussi</h2>

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