[解決済み】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];
}
解決方法は?
あるんです。 全く違う JavaScriptでもActionScriptでも、意味や性能は同じです。
var
はパーサに対する指示文であり
ではなく
ランタイムに実行されるコマンドです。もし、特定の識別子が
var
関数本体(*)のどこかで1回以上その識別子を使用した場合、ブロック内でその識別子を使用した場合は、すべてそのローカル変数を参照することになります。このとき
value
と宣言されています。
var
ループの内側、外側、またはその両方。
結果的に、読みやすいほうを書けばいいんです。私は、関数の先頭にすべてのバーを置くことが常にベストであるというCrockfordの意見に反対です。コードの一部で一時的に変数を使用するような場合は、次のように宣言するのがよいでしょう。
var
そのセクションは独立していて、コピーペーストが可能です。そうでなければ、リファクタリング中に新しい関数に数行のコードをコピーペーストして、別途関連する
var
そして、偶発的なグローバルが発生します。
特に
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockfordは、2番目の
var
(または、両方の
var
を実行し
var i;
を参照)、jslintはこのことであなたに泣きつくでしょう。しかし、IMOでは、両方の
var
のように、関数の先頭に忘れやすいコードを追加するのではなく、関連するコードをすべて一緒にしておくのです。
個人的には
var
というのは、独立したコードのセクションで最初に変数を代入するとき、同じ関数の他の部分で同じ変数名が別に使われているかどうかに関係なく、その変数が使われるからです。私にとっては
var
ANSI Cの古いリビジョンの制限をJavaScriptにも適用することは、私の義務とは考えていないのです。
(*: ネストした関数本体以外)
関連
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】中央値の計算 - javascript
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ループ内のJavaScriptクロージャ - シンプルな実用例
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み] [Solved] Uncaught TypeError: nullのプロパティ 'appendChild' を読み取ることができない。
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?