(1)以下のJavaScript関数を考えてみましょう:Javascriptのオブジェクトはいつ構築されますか?
function setData(domElement) {
domElement.myDataProperty = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
};
は今、私はこの機能については好きではないものを正確に同じオブジェクトは関数が呼び出されるたびに作成されていることです。オブジェクトは変わらないので、私はむしろ1回だけ作成します。スクリプトがロードされ、dataObject
に格納されている場合
var dataObject = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
function setData(domElement) {
domElement.myDataProperty = dataObject;
};
今すぐオブジェクトが一度作成されます。だから我々は、以下の調整(2)を作ることができます。しかし、setData
がときどきしか呼び出されないと仮定しましょう。スクリプトがロードされるほとんどの時間、関数は使用されません。その場合のこの機能について私が気に入らないのは、オブジェクトが常に使用されない場合を含め、常に作成されてメモリに保持されるということです。意味をなさない
var dataObject;
function setData(domElement) {
if (!dataObject) {
dataObject = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
}
domElement.myDataProperty = dataObject;
};
う:私はあなたが理想的なバランス(3)を打つためにこのような何かを行うことができます考え出しましたか?私はインタプリタがオブジェクトを作成することをいつ決定するかによって決まると思います。 !dataObject
状態になるまで待つか、関数に入り込んでスマートにしようとするのか、事前に構築することを決めるのか?おそらく異なるJavascriptエンジンにはこれに関するさまざまなポリシーがありますか?
もちろん、これらの最適化が実際に重要かどうかという疑問があります。明らかに、これはオブジェクトのサイズ、エンジンのスピード、利用可能なリソースの量などの要素に依存します。しかし、一般的には、(1)から(2)または(2)から(3)へ
良い点ですが、ここでは決して変わらない、典型的な機能などのオブジェクトについて話しています。 –
は問題ではありませんが、JSはそれが変更できると言いますが、あなたが変更しようとしていないという事実は無関係です。あなたは 'return [1,2,3];を期待しますか?たとえば、常に同じオブジェクトを返すのですか? – olliej