--- title: for slug: Web/JavaScript/Reference/Statements/for tags: - Instruction - JavaScript - Reference translation_of: Web/JavaScript/Reference/Statements/for original_slug: Web/JavaScript/Reference/Instructions/for ---
L'instruction for
crée une boucle composée de trois expressions optionnelles séparées par des points-virgules et encadrées entre des parenthèses qui sont suivies par une instruction (généralement une instruction de bloc) à exécuter dans la boucle.
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 !
for ([initialisation]; [condition]; [expression_finale]) instruction
initialisation
var
ou let
. Les variables déclarées avec var
se situent dans la même portée que la boucle for
(elles ne sont pas locales au sein de la boucle), les variables déclarées avec let
sont locales à la boucle. Le résultat de l'expression n'est pas utilisé.condition
instruction
est exécutée. Ce test est optionnel. S'il n'est pas présent, la condition sera toujours vérifiée. Si l'expression n'est pas vérifiée (i.e. vaut false
), l'exécution se poursuivra à la première expression qui suit la boucle for
.expression_finale
condition
. Cette expression est généralement utilisée pour mettre à jour ou incrémenter le compteur qu'est la variable d'initialisation.instruction
{ ... }
) qui regroupera ces différentes instructions.for
L'instruction for
qui suit débute en déclarant la variable i
et en l'initialisant à 0. Elle vérifie que i
est inférieur (strictement) à 9 et exécute ensuite les deux instructions contenues dans la boucle, ensuite elle incrémente i
de 1, ce qui sera fait à chaque passage dans la boucle.
for (var i = 0; i < 9; i++) { n += i; myfunc(n); }
for
Les trois expressions qui composent l'instruction for
sont optionnelles :
Par exemple, le bloc pour l'initialisation peut ne pas être utilisé :
var i = 0; for (; i < 9; i++) { console.log(i); // d'autres instructions }
De même que pour le bloc d'initialisation, l'expression de condition est optionnelle. Attention, si l'expression de condition n'est pas utilisée, il faut s'assurer d'interrompre la boucle et de ne pas créer une boucle infinie.
for (var i = 0;; i++) { console.log(i); if (i > 3) break; // d'autres instructions }
Les trois blocs d'expressions peuvent être omis. Encore une fois, il faudra utiliser une instruction {{jsxref("Instructions/break")}} pour terminer la boucle. Si le test se fait sur un seuil, on veillera à incrémenter la variable pour que la condition d'arrêt modifiée soit respectée.
var i = 0; for (;;) { if (i > 3) break; console.log(i); i++; }
for
avec une instruction videL'instruction for
qui suit calcule le décalage d'un nœud et le fait dans la section qui correspond à l'expression finale. Il n'y a donc aucun intérêt à ajouter une instruction ou un bloc d'instruction dans la boucle pour faire ce calcul.
function showOffsetPos (sId) { var nLeft = 0, nTop = 0; for (var oItNode = document.getElementById(sId); oItNode; nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent); console.log("Décalage de position : \"" + sId + "\" element:\n left: " + nLeft + "px;\n top: " + nTop + "px;"); }
Spécification | État | Commentaires |
---|---|---|
{{SpecName('ESDraft', '#sec-for-statement', 'for statement')}} | {{Spec2('ESDraft')}} | |
{{SpecName('ES6', '#sec-for-statement', 'instruction for')}} | {{Spec2('ES6')}} | |
{{SpecName('ES5.1', '#sec-12.6.3', 'instruction for')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES3', '#sec-12.6.3', 'instruction for')}} | {{Spec2('ES3')}} | |
{{SpecName('ES1', '#sec-12.6.2', 'instruction for')}} | {{Spec2('ES1')}} | Définition initiale |
{{Compat("javascript.statements.for")}}