JavaScript 変数はループの外側または内側で宣言されますか? 質問する

JavaScript 変数はループの外側または内側で宣言されますか? 質問する

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ているかは関係ありません。valuevar

したがって、最も読みやすいと思う方を記述する必要があります。すべての変数を関数の先頭に配置することが常に最善であるという Crockford の意見には同意できません。変数がコード セクションで一時的に使用される場合は、varそのセクションで宣言して、そのセクションが独立してコピー アンド ペーストできるようにした方がよいでしょう。そうでない場合、リファクタリング中に、関連する を個別に選択して移動せずに、数行のコードを新しい関数にコピー アンド ペーストするvarと、意図しないグローバルが作成されます。

特に:

for (var i; i<100; i++)
    do something;

for (var i; i<100; i++)
    do something else;

varCrockford は 2 番目のものを削除する(または両方の を削除して上記をvar実行する)ことを推奨しvar i;、jslint はこれに対して文句を言うでしょう。しかし、私の意見では、関数の先頭に余分な忘れられやすいコードを追加するよりも、両方の を残して関連するコードをすべてまとめておく方varが保守しやすいと思います。

var個人的には、同じ関数の別の部分で同じ変数名が別々に使用されているかどうかに関係なく、独立したコード セクションで変数の最初の割り当てとして宣言する傾向があります。私にとって、宣言する必要varがあることは、JS の望ましくない欠点です (変数をデフォルトでローカルに設定した方がよかったでしょう)。ANSI C [の古いリビジョン] の制限を JavaScript でも再現するのは私の義務ではないと思います。

(*: ネストされた関数本体以外)

おすすめ記事