javascript what is the purpose of using a function call like this (function() { //code; })();
Possible Duplicates:
Is the following JavaScript construct called a Closure?
What do parentheses surrounding a JavaScript object/function/class declaration mean?
How does the (function() {})() construct work and why do people use it?
Difference between (function(){})(); and function(){}();
嗨,
因为我正在查看一个只有简单的html文本的站点而没有图形我想到查看它的代码。
当我这样做时,我找到了这个脚本
1 2 3 4 5 6 7 8 9 10 11 | <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-13137273-2']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); |
使用如下代码有什么特殊目的
1 | (function() { /*code;*/ })(); |
我在jquery中看到过它。 但我对自由风格的极端JavaScript编程仍然不太满意。
建议,意见和答案。 任何都会很好。
谢谢
[我在第一个答案后写这个。 在某种意义上的极端......这是我在其他编程语言中找不到的,而且我无法猜到它可能是什么。 除了javascript中有很多非凡的选项,我提到它是极端的。 也许我应该用另一部作品。]
假设他们这样做了:
1 2 3 4 5 6 7 8 | <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-13137273-2']); _gaq.push(['_trackPageview']); var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); |
这将以相同的方式工作,但现在变量
尝试谷歌搜索"为什么全局变量不好?"欲获得更多信息。该技术是一种避免创建全局变量的方法。
它限制了函数内声明的变量的范围,以避免乱丢全局命名空间。
这是一种常见的良好做法,并没有什么极端的。
javascript的一个很酷的功能是匿名函数,这就是它的一个例子。
使用匿名函数(也称为第一类函数),您可以将函数分配给变量并将其作为数据传递,如下所示:
1 2 | var foo = function(){return 4;} var x = foo(); //x=4 |
在该示例中,
这开辟了许多很酷的可能性。例如,您可以返回函数,将函数作为参数传递等。
编辑:在您的特定情况下,使用匿名函数的原因是保持变量在本地使用,并避免不必要地将变量添加到周围的命名空间。这类似于在C中创建