AS3 では、パフォーマンスを向上させるために、ループの外側ですべての変数を初期化する必要があると思います。これは JavaScript でも同じでしょうか? どちらが優れているか、より高速か、ベスト プラクティスか?
var value = 0;
for (var i = 0; i < 100; i++)
{
value = somearray[i];
}
または
for (var i = 0 ; i < 100; i++)
{
var value = somearray[i];
}
ベストアンサー1
JavaScript と ActionScript では、意味やパフォーマンスにまったく違いはありません。
var
はパーサーのディレクティブであり、実行時に実行されるコマンドではありません。特定の識別子が関数本体(*)のどこかで 1 回以上宣言されている場合、ブロック内でのその識別子の使用はすべてローカル変数を参照することになります。ループ内で宣言されているか、ループ外で宣言されているか、またはその両方で宣言されvar
ているかは関係ありません。value
var
したがって、最も読みやすいと思う方を記述する必要があります。すべての変数を関数の先頭に配置することが常に最善であるという Crockford の意見には同意できません。変数がコード セクションで一時的に使用される場合は、var
そのセクションで宣言して、そのセクションが独立してコピー アンド ペーストできるようにした方がよいでしょう。そうでない場合、リファクタリング中に、関連する を個別に選択して移動せずに、数行のコードを新しい関数にコピー アンド ペーストするvar
と、意図しないグローバルが作成されます。
特に:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
var
Crockford は 2 番目のものを削除する(または両方の を削除して上記をvar
実行する)ことを推奨しvar i;
、jslint はこれに対して文句を言うでしょう。しかし、私の意見では、関数の先頭に余分な忘れられやすいコードを追加するよりも、両方の を残して関連するコードをすべてまとめておく方var
が保守しやすいと思います。
var
個人的には、同じ関数の別の部分で同じ変数名が別々に使用されているかどうかに関係なく、独立したコード セクションで変数の最初の割り当てとして宣言する傾向があります。私にとって、宣言する必要var
があることは、JS の望ましくない欠点です (変数をデフォルトでローカルに設定した方がよかったでしょう)。ANSI C [の古いリビジョン] の制限を JavaScript でも再現するのは私の義務ではないと思います。
(*: ネストされた関数本体以外)