2010-12-27 5 views
0

私は人々がvarがより多くのメモリを割り当てるのではなく、参照を作成しませんコンパクトさのためにvar x = obj.propを再宣言することは非効率的ですか?

var x = obj.child.prop1; 
doSomething(x); 
doOtherThings(x); 

ような何かをすることのどう思うか不思議でしたか?この場合、xを再定義するのを避け、より長い参照を代わりに使用する価値がありますか?

+0

メモリを割り当てるにあたって、メモリが不足している場合は、「x」を定義してください。 – Matchu

+0

JavaScriptやパフォーマンスについて読んだ本では、(おそらくネストされた)プロパティに複数回アクセスしなければならない場合は、それをローカル変数に代入してください。それに加えて、 'obj'はあなたのスコープ内にさえいないかもしれないし、それをキャッシュしてスコープチェーン内のルックアップを避けることさえ可能かもしれません。 –

答えて

5

いいえ、varは、さらにメモリを割り当てません。それは、プロパティーobjとそのオブジェクトのprop1プロパティーをそれぞれ2回経由する代わりに、obj.child.prop1への参照を直接作成することです。私が知っているどのような場合でも、コードサイズと実行速度の両方の面でより効率的です。

0

いいえ、 'var'キーワードは、(軽量参照に必要な以上に)メモリをさらに割り当てません。これは、TANSTAAFLが真実ですが、その一方で、その影響はごくわずかです。

私のアドバイス:それをベンチマークしてください。おそらく、あなたは違いを測定することはできませんが見つかります。現代のブラウザーの中には、重いループの中で物事をより遅くするものがあるかもしれません。

+0

スタックのメモリは事前に割り当てる必要があり、すべてのローカル変数の要求に応じて取得する必要はありません。 – Chuck

+0

@Chuckはい、割り当ては必要です。したがって、ステートメントがヒットした瞬間には割り振りませんが、同じ文字列を参照する40,000の固有変数を持つプログラムは、1つの変数のみを持つものよりも多くのメモリを必要とします。 – Phrogz

+0

これは、それらの変数バインディングがすべて同時に存在しなければならない場合にのみ当てはまります。オブジェクトへの4つの参照(プログラム全体で40,000の変数)を使用する10,000の関数がある場合、関数がすべて1つの変数参照を共有する場合よりも、変数のメモリ消費量が増えることはありません。 – Chuck

0

読みやすくするためです。

obj.child.prop1.prop2.prop3のような参照がある場合は、変数に格納することをお勧めします。 Readabilitiは、マイナーなパフォーマンス問題よりも価値があります。

関連する問題