JavaScriptでもActionScriptでも、意味やパフォーマンスに違いはありません。
var
パーサーのディレクティブであり、実行時に実行されるコマンドではありません。特定の識別子がvar
関数本体(*)のどこかで1回以上宣言されている場合、ブロック内でのその識別子の使用はすべてローカル変数を参照します。がループの内側、ループの外側、またはその両方value
として宣言されているかどうかは関係ありませんvar
。
したがって、最も読みやすいと思われる方を記述してください。すべての変数を関数の先頭に配置することが常に最良の方法であるというのは、クロックフォードとは同意しません。変数がコードのセクションで一時的に使用される場合は、var
そのセクションで宣言することをお勧めします。そのため、セクションは独立しており、コピーして貼り付けることができます。それ以外の場合は、関連付けられているを個別に選択して移動することなく、リファクタリング中に数行のコードを新しい関数にコピーアンドペーストするvar
と、誤ってグローバルになります。
特に:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockfordは2番目を削除することをお勧めしますvar
(またはvar
sとvar i;
上記の両方を削除します)。jslintはこれを求めます。ただし、IMOの場合var
、関数の上部に簡単に忘れられるコードを追加する代わりに、両方のsを保持し、関連するすべてのコードを一緒に保持する方が保守しやすくなります。
個人的にvar
は、同じ関数の他の部分で同じ変数名の別の使用法があるかどうかに関係なく、コードの独立したセクションで変数の最初の割り当てとして宣言する傾向があります。私にとってvar
は、まったく宣言しなければならないのは望ましくないJSイボです(変数をデフォルトでローカルに設定する方がいいでしょう)。私は、JavaScriptでANSI C [の古いリビジョン]の制限を複製することも私の義務とは考えていません。
(*:ネストされた関数本体以外)