for
for 文は、括弧で囲みセミコロンで区切った 3 つの引数と、続いてループ内で実行される文 (ふつうはブロック文) から成るループを構成します。
試してみましょう
構文
for ([initialization]; [condition]; [final-expression]) statement
initialization
- : ループが始まる前に一度だけ評価される (代入式を含む) 式または変数宣言。ふつうはカウンター変数を初期化するために使われます。この式では任意で、
var
キーワードを用いて新しい変数を宣言することもできます。var
で宣言された変数はループ内のローカル変数にはなりません。すなわち、for
ループが属するスコープと同じスコープになります。let
で宣言された変数は文内のローカル変数になります。
- : ループが始まる前に一度だけ評価される (代入式を含む) 式または変数宣言。ふつうはカウンター変数を初期化するために使われます。この式では任意で、
condition
- : ループのそれぞれの反復処理が行われる前に評価される式です。この式が true と評価された場合は、
statement
が実行されます。この条件テストは省略可能です。省略された場合は、条件は常に true に評価されます。もしこの式が false と評価された場合は、実行はfor
構造に続く最初の式に飛びます。
- : ループのそれぞれの反復処理が行われる前に評価される式です。この式が true と評価された場合は、
final-expression
- : ループのそれぞれの反復処理の最後に評価される式です。これは、次の
condition
の評価前に行われます。一般的には、カウンター変数を更新または増加するために使われます。
- : ループのそれぞれの反復処理の最後に評価される式です。これは、次の
statement
例
for の使用
次の for
文は、変数 i
を宣言し、それを 0
に初期化することから始まります。i
が 9 より小さいことをチェックし、続く 2 つの文を実行し、ループを通過した後ごとに i
を 1 増加します。
for (let i = 0; i < 9; i++) {
console.log(i);
// その他の文
}
省略可能な for の式
for
ループの先頭にある 3 つの式は、省略可能です。
例えば、 initialization
ブロックで変数を初期化する必要はありません。
var i = 0;
for (; i < 9; i++) {
console.log(i);
// その他の文
}
initialization
ブロックと同様に、 condition
ブロックも省略可能です。この式を省略した場合は、本体の中でループを脱出できるようにして、無限ループにならないようにしなければなりません。
for (let i = 0;; i++) {
console.log(i);
if (i > 3) break;
// その他の文
}
3 つのブロックをすべて省略することもできます。繰り返しますが、 break
文を使用してループを終了させ、また break 文の条件がある時点で true になるように、変数を変更 (増加) させていることを確認してください。
var i = 0;
for (;;) {
if (i > 3) break;
console.log(i);
i++;
}
文を持たない for の使用
以下の for
の繰り返しでは、 final-expression
句の中でにおけるノードのオフセット位置を検索しています。 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;');
}
/* 呼び出しの例 */
showOffsetPos('content');
// Output:
// "Offset position of "content" element:
// left: 0px;
// top: 153px;"
メモ: これは、セミコロンが必須となる JavaScript の数少ないケースの 1 つです。セミコロンがないと、繰り返し宣言の次の行が繰り返す文と見なされます。
仕様書
Specification |
---|
ECMAScript Language Specification # sec-for-statement |
ブラウザーの互換性
BCD tables only load in the browser