2

GoogleAnalyticsのトラッキングコードは次のようになります。

(function() {
code
  })();

彼らがそれらの括弧で使用しているテクニックは何ですか---(stuff)()呼ばれますか?それは何をするためのものか?

ページの終了ヘッドタグの前にGoogleAnalyticsコードを配置し、その周りに次のようにifステートメントを配置します(Jquery cookieプラグインをさらに上に含めます)。

<script type="application/javascript">
if ($.cookie('allowcookies') == 'yes') {
analytics code
}
</script>

コードで同じ手法を使用するまで、実行されませんでした。

(function() {if ($.cookie('allowcookies') == 'yes') {

analytics code
}
})();

それをする前になぜそれが実行されなかったのですか?なぜそれが追いかけたのですか?

4

3 に答える 3

8
(function() {
   /* code */
}()); 

これは一般に«自己実行無名関数(¹)»(o«即時関数呼び出し»)として知られており、その主な用途は、グローバル(または外部)スコープへの変数の作成を回避することです。

また、最初に独自の識別子を使用して関数を定義し、すぐに関数を呼び出す必要なしに、一度だけ実行する関数を作成する場合のショートカットとしても使用されます。

最終的にスコープ内で使用される可能性があり、外部コンテキスト(または他の参照)が渡されるパラメーターを介してバインドされる場合、クロージャーを作成する可能性があります。

/* outer scope */  
(function(outerscope) {

   element.onsomeevent = function() {
       /* do something with outerscope */
   };

}(this));

newこの式で行うもう1つの実用的な使用法は、(メソッドを明示的に呼び出す代わりに)キーワードを使用して呼び出されたときに、コンストラクター関数内ですぐに実行される関数を作成する必要がある場合ですinit


(¹)— Nicholas Zakas( O'Reilly、ISBN 978-1-449-32768-2 )の本「MantainableJavascript」の44ページに記載されているように、推奨される式は(function() {}())、ネストされた親を使用したものです((function() {})()とにかく機能する場合でも)

[...]関数の即時呼び出しが行われていることを明確にするために、関数の周りにparethesesを配置します[...]

即時関数呼び出し構文も参照してください。

于 2012-09-04T08:43:50.563 に答える
3

「function(){code}」の部分は関数を作成するだけで、最後の()は作成された関数を呼び出します。あなたは書き直すことができます

(function() {
code
  })();

として

var x = function() {code};
x();
于 2012-09-04T08:41:47.447 に答える
1

これは単なる選択呼び出し関数です。最後の()により、自動的に呼び出されます。

このように使用して、コードにのみ関連するローカル変数をグローバルスコープから分離します。

例えば:

(function() {

   var x = 5;
   window.y = 6;

})();

xは関数のスコープ内でのみ使用可能であり、yはウィンドウを介してグローバルに使用可能です。

それが実行されていないことに関しては、私はあなたが提供した条件にかかっている危険を冒します。

于 2012-09-04T08:40:51.627 に答える