for

This article needs an editorial review. How you can help.

Resum

La sentència for crea un bucle que consta de tres expressions opcionals, embolcallades entre paràntesis i separades per punts i comes, seguits d'una sentència o un grup de sentències executades en el bucle.

Sintaxi

for ([inicialització]; [condició]; [expressió final])
   sentència
inicialització
Una expressió (incloent expressions d'assignació) o declaració de variables. Normalment s'usa per inicialitzar una variable al contador. Opcionalment aquesta expressió pot declarar noves variables amb la paraula clau var.  Aquestes variables no sóc locals pel bucle, és a dir, es troben en el mateix àmbit en que es troba el bucle for. El resultat d'aquesta expressió es descarta.
condició
Una expressió que s'avalua abans de cada iteració del bucle. Si aquesta expressió s'avalua true, s'executa la sentència. Aquesta prova condicional és opcional. Si s'omet, la condició sempre avalua true. Si l'expressió avalua a false, l'execució salta a la primera expressió que es trobi després del constructe for.
Expressió final
Una expressió per ser avaluada al final de cada iteració del bucle. Això passa abans de la següent avaluació de condició. Generalment s'usa per actualitzar o incrementar la variable contador.
sentència
Una sentència que s'executa mentre la condició avalui a true. Per executar múltiples sentències dins el bucle, utilitzeu una sentència block ({ ... }) per agrupar aquestes sentències. Per no executar cap sentència dins el bucle, utilitzeu una sentència buida  (;).

Exemples

Exemple: Fer servir for

La següent sentència for comença declarant la variable i i l'inicialitza a 0. Comprova que  i és menor que nou, realitza les dues sentències següents, i incrementa i per 1 després de cada pas pel bucle.

for (var i = 0; i < 9; i++) {
   console.log(i);
   // more statements
}

Exemple: Expressions for opcionals

Les tres expressions en la capçalera del bucle for són opcionals.

Per exemple, enel bloc d'inicialització no es requereix inicialitzar les variablesblock it is not required to initialize variables:

var i = 0;
for (; i < 9; i++) {
    console.log(i);
    // more statements
}

Com el bloc d'inicialització, el bloc de condició també és opcional. Si s'omet aquesta expressió, s'ha de d'assegurar de trencar el bucle en el cos per evitar crear un bucle infinit.

for (var i = 0;; i++) {
   console.log(i);
   if (i > 3) break;
   // more statements
}

També es pot ometre els tres blocs. Un alre cop, assegureu-vos de fer servir la sentència break per finalitzar el bucle i també modificar (incrementar) una variable, de forma que la condició per la sentència break esdevé certa en algun moment determinat.

var i = 0;

for (;;) {
  if (i > 3) break;
  console.log(i);
  i++;
}

Exemple: Fer servir for amb una sentència buida

El cicle for següent callcula la possició de desplaçament d'un node en la secció  [expressió final], i per tant no requereix l'ús d'una sentència o secció de sentències block, es fa servir una sentència buida en el seu lloc.

function showOffsetPos (sId) {
  var nLeft = 0, nTop = 0;

  for (var oItNode = document.getElementById(sId); // initialization
       oItNode; // condition
       nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent) // final-expression
       /* empty statement */ ;
  
  console.log("Offset position of \"" + sId + "\" element:\n left: " + nLeft + "px;\n top: " + nTop + "px;");
}

// Example call:

showOffsetPos("content");

// Output:
// "Offset position of "content" element:
// left: 0px;
// top: 153px;"
Nota: En aquest cas, quan no es fa servir la secció sentència, es fica un punt i coma immediatament despres de la declaració del cicle.

Especificacions

Especificació Estat Comentaris
1a edició de ECMAScript. Estàndard Definició inicial.
ECMAScript 5.1 (ECMA-262)
The definition of 'for statement' in that specification.
Standard  
ECMAScript 6 (ECMA-262)
The definition of 'for statement' in that specification.
Release Candidate  

Compatibilitat amb navegadors

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suport bàsic (Yes) (Yes) (Yes) (Yes) (Yes)
Característica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suport bàsic (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Vegeu també

Document Tags and Contributors

 Contributors to this page: fscholz, llue
 Last updated by: fscholz,