MDN ではfor文の第一要素を初期化式(initial-expression)と説明している

概要

for文の第一要素で変数宣言するコードは次のようになります。

for (var i = 0; i < 10; i++) {
  alert(i);
}

この時、var i = 0 が「式」であるかのように誤解されることがあるようです。

ECMAScript 3 では

ECMAScript 3 では ExpressionNoInVariableDeclarationListNoIn の2つにわけて説明されています。

for (ExpressionNoIn; Expression ; Expression ) Statement
for ( var VariableDeclarationListNoIn; Expression ; Expression ) Statement
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/12_Statements.html#section-12.6

VariableDeclarationListNoIn では変数文 (VariableStatement) と同じように機能します。これは「式」ではありません。

for (var i = 0, length = 10; i < length; i++) { // 第一要素は VariableDeclarationListNoIn
  alert(i);
}

ExpressionNoIn では「式」をカンマ演算子で列挙できます。

var i, length;                              // VariableStatement

for (i = 0, length = 10; i < length; i++) { // 第一要素は ExpressionNoIn
  alert(i);
}

MDN では

MDNでfor文の第一要素の説明を見てみます。

構文
for ([initial-expression]; [condition]; [final-expression])
   statement
Parameters

initial-expression
(代入式を含む) 式または変数宣言。たいていは、カウンタ変数を初期化するために使われます。この式では、var キーワードを用いて新しい変数を任意で宣言してもかまいません。これらの変数はループにローカルなものではありません。すなわち、これらは for ループが属するスコープと同じスコープ内にあります。この式の結果は捨て去られます。

https://developer.mozilla.org/ja/JavaScript/Reference/Statements/for

"式または変数宣言" は正当な説明だと思いますが、大本は initial-expression とあるので変数宣言も式であると勘違いされる可能性があります。
また、"この式では、var キーワードを用いて新しい変数を任意で宣言してもかまいません。" という記述は極めてわかりにくく、「var キーワードを使って代入式を宣言している」ようにも読み取れます。

JavaScript第5版』では

JavaScript第5版』(いわゆるサイ本)には次のように書かれています。

6.8 for文

...(中略)...
for文の書式は次のとおりです。

for (initialize; test; increment)
  statement

for文の働きは、for文と同じ処理を行うwhile文と比較するとよくわかると思います。

initialize;
while(test) {
  statement
  increment;
}

ループを行う前に initialize 式を1回だけ評価します。通常、initialize 式は代入などの副作用を伴います。JavaScript では、var文を使って変数を宣言することもできます。ループカウンタ変数の宣言と初期化が同時にできて便利です。...

JavaScript第5版 P90

やや複雑ですが、「initialize 式」と「変数宣言」をわけて解説されていることがわかります。「initialize 式」は英語にすれば "initial-expression" になりますから、MDN の 語源 出典はここにあるのかもしれません。ただ、"initial-expression" に変数宣言も含めるのは『JavaScript第5版』の著者の意図に反していると思います。

MDNから生じた勘違い

下記のような勘違いが生まれたことがありました。(説明の都合上、文面を多少換えています)

  1. for (var i = 0, length = 10; i < length; i++) という書き方もあるよ。」
  2. 「カンマ演算子を使っているのか。」
  3. 「カンマ演算子なんて出てきてないよ。」
  4. 「var a=1, b=2, c=3; をカンマ演算子というのか。勉強になった。」
  5. 「違うよ!全然違うよ!」
  6. MDCのfor文の説明には『for ([initial-expression]; [condition]; [final-expression]) (代入式を含む) 式または変数宣言。』とあるんだけど…。」(※現在のMDNは当時MDCという名前でした)
  7. 「var がついてなければ式。var がついていれば文。」
  8. 「なるほど。勉強になった。」

「変数宣言が式である -> 式であるならカンマ演算子が使えるはず」という流れ。確かに式ならカンマ演算子を使えますからそう解釈する気持ちは理解できます。

結論

for文の第一要素d変数初期化を行う場合、var を伴わない変数宣言は「式」ですが var を伴う変数宣言は「式」ではありません。var を伴う変数宣言を「文」と呼べるかは少し怪しい気もします(「文」なら "VariableStatement" を定義すればよく、わざわざ "var VariableDeclarationListNoIn" を定義しているところをみると「文」と区別されているように思えます)が、少なくとも「式」ではないと思います。

結論としては、MDN の "initial-expression" は「式のみを入れられる」という誤解を生むと思います。