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)
为什么在我这样做之前没有运行?它为什么要追赶?
(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 围绕功能[...]
另请参见立即函数调用语法
归档时间: |
|
查看次数: |
272 次 |
最近记录: |