2017-08-11 15 views
0

これはあまりにも漠然として申し訳ありませんが、私はそれが何であるか分かりませんので、これを他にどのように尋ねるべきかは確信しています。私は一度これを見たことがありますが、何をやっているのか、どこで探しているのか覚えていません。JavaScriptでこれらのカプセル化括弧は何を意味しますか?

このコードは、外側のカッコと「ウィンドウ」のもので何をしていますか?

(function(angular){ 
//some code 
})(window.angular); 

本当に申し訳ありません。私が公式の文書や何かを参照した後、投稿を削除します。

+2

文法に 'function'キーワードがあいまいです。ステートメント内の最初のトークンである場合、そのステートメントは関数宣言になります。あなたが投稿したコードでは、関数のインスタンス化を関数*式*として解釈する必要があります。そのため、かっこでパーサを「式解析」モードにして、すべてが機能します。 – Pointy

+3

それは[IIFE](http://benalman.com/news/2010/11/immediately-invoked-function-expression/)のように見える – zer00ne

+1

@MrGeek:それはそうだが、私はこのことこれはそうだったので、 "匿名関数の構文"を照会する方法はありません。 –

答えて

2

これはIIFE(Immediately Invoked Function Expressions)の例です。詳細はhereをご覧ください。

最初の部分

(function(angular){ 
//some code 
}) 

匿名関数(それは名前がありません)です。あなたは(ページ/ DOMがロードされたとき)、すぐにそれを実行したいので、あなただけのかっこ、引数とセミコロン..with他の関数

(window.angular); 

のようにそれを呼び出します。 あなたの引数(window.angular)は単なるグローバルオブジェクトです(なぜそれがwindowスコープで定義されているのですか)。

つまり、グローバルに定義された引数を使用してその関数本体を実行しています。

+0

さて、これと通常の "document.ready(function(){})の違いは何ですか?"これは、 –

+0

申し訳ありません。もう一度、5回目に読んでください。document.readyバージョンでは、関数にパラメータを配置する機会はありませんが、この関数を他の場所で呼び出すことはできませんあなたのhedgemaze of javaScri ptファイル...私はこれを正しく理解していますか? –

+0

@SageKelly正しく言っておけば、DOMがロードされたときに 'document.ready'を使ってコードを初期化/実行することもできます。違いは、あなたがそれを忘れないようにすることです。 IIFEはブラウザによって自動的に実行されます。スコープ付きオブジェクト(あなたの場合は 'window.angular')でしかアクセスできない関数のセットを書くのであれば、これはもっと良い方法です。サードパーティ製のライブラリは通常、このルートに従います.JSファイル参照を含めるだけです。 –

関連する問題