Google分析跟踪代码使用的技术是什么?

pau*_*iss 2 javascript google-analytics

Google Analytics跟踪代码如下所示:

(function() {
code
  })();
Run Code Online (Sandbox Code Playgroud)

他们使用这些括号的技术是什么(stuff)()- 被称为?它有什么作用?

我将Google Analytics代码放在我页面上的结束标记之前,然后像这样放置一个if语句(我进一步包含了一个Jquery cookie插件):

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

直到我在代码中使用相同的技术,它才运行:

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

analytics code
}
})();
Run Code Online (Sandbox Code Playgroud)

为什么在我这样做之前没有运行?它为什么要追赶?

fca*_*ran 8

(function() {
   /* code */
}()); 
Run Code Online (Sandbox Code Playgroud)

它通常被称为«自执行匿名函数(¹)»(O«立即函数调用»)和它的主要用途是为了避免变量的创建到全球(或外)范围.

当你想创建一个只执行一次的函数时,它也可以用作快捷方式,而不需要先用自己的标识符定义函数,然后很快进行函数调用.

它可能最终在范围内使用,然后如果外部上下文(或其他引用)通过参数传递绑定,它可以创建一个闭包,例如

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

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

}(this));
Run Code Online (Sandbox Code Playgroud)

我用这个表达式实现的另一个实际用途是当我需要创建一个函数,以便在使用new关键字调用它时很快在构造函数内执行(而不是显式调用某个init方法).


(¹) - 正如Nicholas Zakas的书"Mantainable Javascript"(O'Reilly,ISBN 978-1-449-32768-2)第44页所述,建议的表达式是(function() {}())嵌套的parens(即使(function() {})()无论如何都会起作用)

[...]为了使它明显,直接的函数调用正在进行,把paretheses 围绕功能[...]

另请参见立即函数调用语法