ループ内での変数宣言

さらに正確を期して言うなら、この挙動は「関数内のローカル変数は、全て関数の先頭で宣言されたことになる」というルールによるものです。

JavaScriptの変数のスコープについて学ぶ - page3 - builder by ZDNet Japan

こんなのを読んだので実験。

javascript:(function(){
  var t0=new Date().getTime();
  var a;
  for(i=0;i<1000000;i++){a=1}
  var t1=new Date().getTime();
  alert(t1-t0);
})();

277ms

javascript:(function(){
  var t0=new Date().getTime();
  for(i=0;i<1000000;i++){var a=1}
  var t1=new Date().getTime();
  alert(t1-t0);
})();

277ms

同じぐらいなんだ。へー。これからはループの外で初期化せずにどんどん var 使ってしまおう。

(ってこの方法でちゃんとあってるのかな? ループの中が複雑になると遅くなるとか?)


さらに実験。

javascript:(function(){
  var t0=new Date().getTime();
  var n=1000000;
  var a=new Array(n);
  for(i=0;i<n;i++){a[i]=1;}
  var t1=new Date().getTime();
  alert(t1-t0);
})();

1061ms

配列の動的割り当て。

javascript:(function(){
  var t0=new Date().getTime();
  var n=1000000;
  var a=[];
  for(i=0;i<n;i++){a[i]=1;}
  var t1=new Date().getTime();
  alert(t1-t0);
})();

1126ms たまに 1350ms ぐらい

やっぱこっちはちょっと遅い。でも無視できるぐらいの差。