for语句用于创建一个循环,它包含了三个可选的表达式,三个可选的表达式包围在圆括号中并由分号分隔,后面跟随一个语句或一组语句在循环中执行.
语法
for ([initialization]; [condition]; [final-expression]) statement
initialization- 一个表达式 (包含赋值语句) 或者变量声明。典型地被用于初始化一个计数器。该表达式可以使用var关键字声明新的变量。初始化中的变量不是该循环的局部变量,而是与该循环处在同样的作用域中。该表达式的结果无意义。
condition- 一个条件表达式被用于确定每一次循环是否能被执行。如果该表达式的结果为true, 循环体内的语句将被执行。 这个表达式是可选的。如果被忽略,那么就被认为永远为true。如果计算结果为false,那么执行流程将被跳到for语句结构后面的第一条语句。
final-expression- 每次循环的最后都要执行的表达式。执行时机是在下一次
condition的计算之前。通常被用于更新或者递增计数器变量。 statement- 只要
condition的结果为true就会被执行的语句。要在循环体内执行多条语句,使用一个 block 结构 ({ ... }) 来包含要执行的语句。没有任何语句要执行,使用一个 empty 语句 (;)。
实例
一般使用
以下例子声明了变量i并被初始赋值为0,for语句检查i的值是否小于9,如果小于9,则执行语句块内的语句,并且最后将i的值递增。
for (var i = 0; i < 9; i++) {
console.log(i);
// more statements
}
忽略表达式
for语句的所有的表达式都是可选的
举个例子,初始化语句(initialization)中的表达式没有被指定:
var i = 0;
for (; i < 9; i++) {
console.log(i);
// more statements
}
就像initialization,condition也是可选的。如果你忽略了,为了不要创建了死循环(无限循环),你必须确保循环体内存在可以退出循环的语句,使用break。
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++;
}
使用空语句的例子
以下为在[final-expression]部分中循环计算一个节点的偏移位置,它不需要执行一个语句或者一组语句,因此使用了空语句。
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;"
Note: In this case, when you do not use the
statement section, a semicolon is put immediately after the declaration of the cycle.规范
| Specification | Status | Comment |
|---|---|---|
| ECMAScript Latest Draft (ECMA-262) for statement |
Living Standard | |
| 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 |
浏览器兼容性
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |