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

时间:2012-09-04 08:36:54

标签: javascript google-analytics

Google Analytics跟踪代码如下所示:

(function() {
code
  })();

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

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

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

直到我在代码周围使用相同的技术才开始运行:

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

analytics code
}
})();

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

3 个答案:

答案 0 :(得分:8)

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

它通常被称为“自执行匿名函数(¹)”(o“立即函数调用”),其主要用途是避免在全局(或外部)范围内创建变量。

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

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

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

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

}(this));

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


(¹) - 如Nicholas Zakas所写的“Mantainable Javascript”( O'Reilly,ISBN 978-1-449-32768-2 44 ,建议的表达式为(function() {}()),嵌套的parens(即使(function() {})()仍然有用)

  

[...]显而易见的是,即时函数调用正在进行中,将 这些函数放在函数中[...]

另见Immediate function invocation syntax

答案 1 :(得分:3)

“function(){code}”部分只创建一个函数,最后的()调用创建的函数。 你可以重写

(function() {
code
  })();

作为

var x = function() {code};
x();

答案 2 :(得分:1)

这只是一个选择呼叫功能。最后的()会自动调用它。

这样使用它来隔离仅与全局范围内的代码相关的局部变量。

例如:

(function() {

   var x = 5;
   window.y = 6;

})();

x仅在函数范围内可用,y通过窗口全局可用。

至于它没有运行,我认为这是你提供的条件。