3

次のコードを使用する理由を理解しようとしています。

    var myObject = myObject || {};

これが何度か使われているのを見てきましたが、なぜこれが必要なのか理解できません。ご回答ありがとうございます。

4

3 に答える 3

4

人々はJavaScriptのバイナリまたは||デフォルト演算子を呼び出します

var myObject = myObject || function(){};

と同じです

var myObject = myObject ? myObject : function(){};

次のコード

var AppSpace = AppSpace || {};

複数のファイルが名前空間を設定して使用するために使用されます。名前空間がすでに作成されている場合は、名前空間を上書きしたくないためです。そうすれば、どのファイルが最初に含まれるかは関係ありません。

デフォルトの別の例を次に示します。

function doSomething (callback)  {
   something();
   code();      
   callback = callback || function() {};
   // Now we can call the callback even if it wasn't passed in.
   callback();         
}

ただし、次の問題に注意してください。IEがwindow.ABC変数を削除するのはなぜですか。

つまり、名前空間がを使用して定義されている場合

window.AppSpace = {a: 1};

そして別のファイルセット

var AppSpace = AppSpace || {}

IEでは、2つのスクリプトが異なるスクリプトタグにある場合、window.AppSpaceの値が空のオブジェクトに上書きされます。これは、変数の巻き上げと、IEがそれを認識せずwindow.avar aトップレベルがすべて同じを指しているためです。変数。

于 2012-09-14T18:19:22.073 に答える
2

クラスはJavaScriptの関数であるため、function(){}は空のクラスです。特にこのコードは、JavaScriptのORからの早期終了を利用しています。最初の項目を評価し、結果が真実の場合はそれに等しく、偽の場合は2番目の項目に等しくなります。したがって、myObjectがtrue(nullではない)の場合、myObjectはそれに等しく、そうでない場合は、空の関数に等しくなります。

基本的に、このコードが言っているのは、「myObjectがすでに何かである場合は、そのままにして、それ以外の場合はこの空白の関数と等しくする」ということです。

于 2012-09-14T18:17:27.467 に答える
0

この手法は「短絡」評価と呼ばれます。

短絡評価、最小評価、またはマッカーシー評価は、最初の引数が式の値を決定するのに十分でない場合にのみ2番目の引数が実行または評価される、一部のプログラミング言語の一部のブール演算子のセマンティクスを示します。 AND関数の引数がfalseと評価される場合、全体の値はfalseである必要があります。OR関数の最初の引数がtrueと評価された場合、全体の値はtrueである必要があります

http://en.wikipedia.org/wiki/Short-circuit_evaluation

于 2012-09-14T20:18:19.917 に答える