非常教程

JavaScript参考手册

声明 | Statements

for

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

语法

for ([initialization]; [condition]; [final-expression])
   statement

initialization表达式(包括赋值表达式)或变量声明。通常用于初始化计数器变量。这个表达式可以有选择地用var关键字声明新的变量。这些变量对于循环来说不是本地的,即它们与for循环所在的范围相同。这个表达式的结果被丢弃。condition在每次循环迭代之前要评估的表达式。如果此表达式的计算结果为true,statement则执行该表达式。这个条件测试是可选的。如果省略,则条件始终为真。如果表达式的计算结果为false,则执行跳到for构造之后的第一个表达式。final-expression在每次循环迭代结束时评估一个表达式。这发生在下次评估之前condition。通常用于更新或增加计数器变量。statement只要条件评估为真即执行的语句。要在循环中执行多个语句,请使用块语句({ ... })对这些语句进行分组。要在循环中执行任何语句,请使用空语句(;)。

示例

使用 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或者一组blockstatement,因此使用了空语句。

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)The definition of 'for statement' in that specification.

Living Standard

ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'for statement' in that specification.

Standard

ECMAScript 5.1 (ECMA-262)The definition of 'for statement' in that specification.

Standard

ECMAScript 3rd Edition (ECMA-262)The definition of 'for statement' in that specification.

Standard

ECMAScript 1st Edition (ECMA-262)The definition of 'for statement' in that specification.

Standard

Initial definition

浏览器兼容性

Feature

Chrome

Edge

Firefox (Gecko)

Internet Explorer

Opera

Safari

Basic support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

Feature

Android

Chrome for Android

Edge

Firefox Mobile (Gecko)

IE Mobile

Opera Mobile

Safari Mobile

Basic support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

JavaScript

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络