ループ内での変数宣言
さらに正確を期して言うなら、この挙動は「関数内のローカル変数は、全て関数の先頭で宣言されたことになる」というルールによるものです。
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 ぐらい
やっぱこっちはちょっと遅い。でも無視できるぐらいの差。