2013-11-23 10 views
14

私はjsを学んでいます。関数としてVARを宣言する際に使用されます。なぜ使用する||可変関数宣言で?

var Triangulation = Triangulation || (function() { 
... 

これはvarはすでにそれを割り当てる前に宣言されているかどうかをチェックしていることに私には思えます。 ウェブを見ても、このアプローチが使われている他の例はありません。何対このアプローチを取る理由は次のようになります。まだ定義されていない場合、それは、triangulation変数戻りそのものである場合

var Triangulation = function() { 
... 

おかげ

+4

おそらく1回のみ設定する方法はありますか? – Sico

+0

これをチェックしてください... http://stackoverflow.com/questions/2100758/javascript-or-variable-assignment-explanation – nik

+0

'var三角測量=三角測量|| ** else ** **関数内のコードの実行を続けます。 –

答えて

19

はそれは、triangulation変数がすでに定義された可能性があることを意味します - - 無名関数は、新しい変数triangulationの値を返します。

重要で敏感なものにはvarがあります。それは扱いにくいビジネスです。例えば:

<script> 
var triangulation = function(){return(1);}; 
</script> 

は実際に意味する:

<script> 
window.triangulation = function(){return(1);};// because "triangulation" is in global      
               // namespace and "var" in this case 
               // means nothing "local", as you may expect 
</script> 

次回、初期var triangulation = ...グローバル変数を上書きします。

var triangulation = triangulation || function(){...}; 
+7

このパターンの一般的な使い方は、「名前空間」を作成するときです。たとえば、次のように定義します。 $ = $ || {}; $ .app = $ .app || {}; $ .app.something = $ .app.something || {}; 次に、すべてのファイルの上部に同じ基本的なものを含めて、名前空間が定義され、定義が互いに矛盾しないようにすることができます。 –

2

TriangulationはそれをShort-circuitingを使用して、新しい値を割り当てる前に存在していないか調べ:あなたがにそれを保存したい場合は、記述する必要があります。これは、ブラウザとは異なる機能をサポートする場合によく使用されます。

たとえば、requestAnimationFrameです。すべてのブラウザは異なるベンダープレフィックスを必要とするため、すべてのブラウザをサポートするように、変数に正しいメソッドを割り当てるには||を使用します。

window.requestAnimFrame = (function(){ 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      function(callback){ 
      window.setTimeout(callback, 1000/60); 
      }; 
})(); 

//whatever exists will be assigned to window.requestAnimFrame . 
1

これは、多くの場合、あなたは、必ずしもファイルのロード順序を知っている(または管理する)はありません彼らの実装は、複数のファイルに分割持っ名前空間のパッケージに使用されます。それはそれはすでに定義されていた場合にだけTriangulationクラスを再割り当て防ぐためですあなたのケースでは

var Namespace = Namespace || {} 

:通常、あなたがこれを行うだろう。

2

||オペレータは、JSは、例えばtruthy値
に評価最初の式の値を返す:
A || B(仮定Aが空の文字列であり、Bは整数(12)である)上記式は12を返します
(すなわち真理値に評価される最初の表現)。

シーンアナライザーでは、三角形分割がすでに宣言されているかどうかをチェックしています。次に、関数式を計算して三角形分割に割り当てる必要があります。
var三角測量=三角測量|| (関数(){

-1

我々は& &(などのJavaScriptで使用している事業者)||(または) と!(NOT)演算子のいくつかの種類があります。これらの演算子はとしても知られている

論理演算子。

論理演算子は、主にプログラムの流れを制御するために使用されている。通常、あなたがもし、しばらく、またはいくつかの他の制御文の一部としてそれらを説明します。

は、||演算子は決定するために使用されますいずれかの条件が真であるかどうか。

例:

if(x == 5 || Y == 5) {.... ....}

おかげ。

+0

は質問とは関係ありません。 – oligofren

関連する問題