for

for 语句用于创建一个循环,它包含了三个可选的表达式,三个可选的表达式包围在圆括号中并由分号分隔, 后跟一个在循环中执行的语句(通常是一个块语句)。

语法

for ([initialization]; [condition]; [final-expression])
   statement
initialization
一个表达式 (包含赋值语句) 或者变量声明。典型地被用于初始化一个计数器。该表达式可以使用 varlet关键字声明新的变量,使用 var声明的变量不是该循环的局部变量,而是与 for循环处在同样的作用域中。用 let声明的变量是语句的局部变量。该表达式的结果无意义。
condition
一个条件表达式被用于确定每一次循环是否能被执行。如果该表达式的结果为true, statement 将被执行。 这个表达式是可选的。如果被忽略,那么就被认为永远为真。如果计算结果为假,那么执行流程将被跳到 for语句结构后面的第一条语句。
final-expression
每次循环的最后都要执行的表达式。执行时机是在下一次 condition的计算之前。通常被用于更新或者递增计数器变量。
statement
只要 condition的结果为true就会被执行的语句。 要在循环体内执行多条语句,使用一个 块语句{ ... })来包含要执行的语句。没有任何语句要执行,使用一个 空语句;)。

示例

使用 for

以下例子声明了变量i并被初始赋值为0for语句检查i的值是否小于9,如果小于9,则执行语句块内的语句,并且最后将i的值增加 1。

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

可选的for表达式

for语句的所有的表达式都是可选的

例如,初始化块中的表达式没有被指定:

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

像初始化块一样,条件块也是可选的。如果省略此表达式,则必须确保在循环体内跳出,以防创建死循环。

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

你当然可以忽略所有的表达式。同样的,确保使用了break语句来跳出循环并且还要修改(增加)一个变量,使得break 语句的条件在某个时候是真的。

var i = 0;

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

使用无语句的for

以下 for 循环计算 [final-expression] 部分中节点的偏移位置 ,它不需要执行一个 statement 或者一组 block statement ,因此使用了空语句。

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 */

  ); /* semicolon */ 

  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;"

提示:这是JavaScript中的少数几种情况,其中分号是强制性的。实际上,没有分号,循环声明之后的行将被视为语句。

规范

Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
for statement
Draft  
ECMAScript 2015 (6th Edition, ECMA-262)
for statement
Standard  
ECMAScript 5.1 (ECMA-262)
for statement
Standard  
ECMAScript 3rd Edition (ECMA-262)
for statement
Standard  
ECMAScript 1st Edition (ECMA-262)
for statement
Standard Initial definition

浏览器兼容

Update compatibility data on GitHub
Desktop Mobile Server
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
for Chrome Full support 1 Edge Full support 12 Firefox Full support 1 IE Full support 3 Opera Full support Yes Safari Full support Yes WebView Android Full support 1 Chrome Android Full support 18 Firefox Android Full support 4 Opera Android Full support Yes Safari iOS Full support Yes Samsung Internet Android Full support 1.0 nodejs Full support Yes

Legend

Full support  
Full support

另请参阅