すぎたです。

In message news:bsbsi8$b7i$1@news511.nifty.com
<kounoike@mbh.nifty.com> wrote ...

>  ナカジマさん,杉田さん情報ありがとうございます。で,至った結論は,forにおけ
> るvar iは使用される場所により,グローバルにもなるし,function localでもある
> ということですかね。

for における var i に限ったことではなく、
var i がグローバルに現れると、global に生成される。
var i が関数の中に現れると、その関数内で local scope が生成される。
(ローカルにメモリが確保される)
block scope ではないので、新たな関数内でなければ、複数回現れると、
新たに生成(と開放)され、スコープ範囲は同じ範囲となる。
i を使用する際、ローカルスコープに無ければ、最大、グローバルまで
遡って検索する。
(例の increout() だと、グローバルには i は無いのでエラーで止まっている)
ということじゃないかと思います。

ローカルに記述した変数へのアクセスに関しては、new を使った際に
結構便利で、よく利用されますよね。
# あまり適切ではありませんが・・・

  function Obj() {
    var s = 0;
    this.init = function (v) {
      s = v;
    }
    this.add = function (v) {
      s += v;
    }
    this.print = function () {
      alert(s);
    }
  }
  var x = new Obj();
  x.init(0);
  x.add(1);
  x.print();

for (var i= に限っていないという点は、block scope でないことから、

  test();

  function test() {
    var i = 10;
    {
      var i = 20;
      alert(i); // 20
    }
    alert(i);   // 20
  }

となりますよね。つまり、
  var i;
  for (i=
と考えても同じではないかと思います。


> ともかく,ECMA-262の規格ってよう分からんというのが正直な感想です。

たしかに。
せめて日本語だとありがたいところです。(^^;;

-- 
杉田
sugi-nws@bk.iij4u.or.jp