0

オブジェクトがそのプロパティの1つとして長さを持っているかどうかに基づいて設定されている変数があります。そうでない場合は、プロパティの1つが存在するかどうかを確認する必要があります。その場合は、そのオブジェクトに格納されている最初の配列を取得して長さを返します。そうでない場合、変数は1に設定されます。これは、このようなステートメントですべて組み合わせることができます。

var b=someObject;
var len = b.num||(b.arrs?(function(a){for(var x in a)return a[x].length})(b.arrs):false)||1;

これを行う別の方法は、関数を引き出してこのようにすることです

function getLength(a){for(var x in a)return a[x].length})
var b=someObject;
var len = b.num||(b.arrs?getLength(b.arrs):false)||1;

片方の方法で他の方法と比較してパフォーマンスが低下するのではないかと思っていました。javascriptエンジンがそれらを見る方法に違いはありますか?私が最初の方法を好む理由は、それが私にたくさんの余分なヘルパー関数を持たせないようにするためです。

4

1 に答える 1

1

匿名のインラインバージョンが実行され、破棄されます。一方、個別の関数インスタンスは

a)関数内で宣言されている場合は、メモリに保持され、残りのローカル変数とともにポップアウトされます

b)ウィンドウオブジェクトのメンバーとしてグローバル空間で定義されている場合、ページの存続期間中メモリに保持されます。

したがって、再度必要になる可能性が低い場合は、私が信じている匿名のインラインルートを使用するのが最善です。

于 2012-09-29T18:53:26.217 に答える