2016-10-10 2 views
1

私はthis code hereを見ていて、私はかなり理解していないスタイルに遭遇しました。私はJavascriptをかなり新しくしていますが、このスタイルの宣言は、私が読んださまざまなチュートリアルの仕方とはまったく違うものです。複数のvarと関数に||が付いていますか?

基本的に私が知りたいことは、このようにして達成されていることですか?

var Spriter; 
(function (Spriter) { 
    . . . 
})(Spriter || (Spriter = {})); 
var Spriter; 
(function (Spriter) { 
    . . . 
})(Spriter || (Spriter = {})); 
. 
. 
. 

なぜかっこが機能しないのはなぜですか? (Spriter = {})(Spriter = {})は、何度も書かれた 'var Spriter'はなぜですか?複数の 'var Spriter'が重複していると思います。

限り、これは何のためにあるのか、それはあなたがフェイザー(ゲームエンジン)

+0

これは、「Spriter」、定義済み、または新しいオブジェクトであり、そうでなければ 'Spriter'に割り当てられます(オブジェクトを作成します)。 – Li357

+0

"*なぜかっこの間に機能が停滞していますか?" - https://stackoverflow.com/questions/1634268/explain-javascripts-encapsulated-anonymous-function-syntax – Bergi

+0

"*そしてなぜ 'var Spriter;複数回書かれていますか?* " - 表示されるファイルは複数のモジュールを連結して生成されます(文字列 - )。 * "私は複数の 'var Spriter'が重複していると思うでしょう。 – Bergi

答えて

5

のvar SpriterにSpriter(2Dアニメーションで骨を使用するための顕著なアニメータースイート)で作成したアニメーションを、使用することができますよう、。 (関数(Spriter){ 。。。})(Spriter ||(Spriter = {}));

このコードは、次

を行っています
  1. Spriter変数が定義されているかどうか最初にチェックしています
  2. Spriterにある値が定義されている場合は、その値が使用されます。
  3. 値がない場合は、次のコードは、

    var Spriter; 
     
    (function (Spriter) { 
     
        alert(Spriter.name); 
     
    })(Spriter || (Spriter = {"name":"xyz"}));

    var Spriter={"age":10}; 
     
    (function (Spriter) { 
     
        alert(Spriter.name); 
     
    })(Spriter || (Spriter = {"name":"xyz"}));
    をsnipettsであなたは明確な理解を持つことができます

空のオブジェクトとしてSpriterをintialiseう

Spriterオブジェクトで定義された名前としてここ

Spriterが空ではないとして、それはSpriterの値を取り、何のプロパティが存在しないとして値の名前が表示されません

希望あなたが見たときに、これは

2

を支援何かこの

(function(arg1, arg2 /*, and so on*/) { 
    // function body 
})(param1, param2 /*, and so on*/) 

ようにそれは、Javascriptの用語では、すぐに起動される関数です。つまり、関数を定義してすぐに呼び出すことです。通常、関数を宣言し、明示的に呼び出す必要があります。例えば、

function test(arg1, arg2) { 
    console.log(arg1, " ", arg2); 
} 

は、この関数を呼び出すために、あなたはこのtest("hello", "world");

を行うが、直後に呼び出される関数構文を使用して、あなたは

(function(arg1, arg2) { 
    console.log(arg1, " ", arg2); 
})("hello", "world"); 

は、同様の効果

を持つことになります行うことができます

例では、関数に渡されるパラメータはです3210、つまりSprinterがnullでない場合はそのままSprinterを渡すか、nullの場合は空のオブジェクト{}を割り当てて渡します。

関連する問題