可能重复:
Difference between (function(){})(); and function(){}();
谷歌我已经看过很多了:
(function(){/*code*/})
为什么他们将自己的功能包含在parethesis中? 区别在于:
function(){/*code*/}
好的问题应该是这样的:
为什么他们将代码包含在内:
(function(){/*code*/})();
而是将代码直接写入js流程?
有什么好处,不同的行为?
答案 0 :(得分:13)
我通常使用立即函数来控制变量范围,以免污染全局名称空间。这是一个非常有用的模式。
(function (window, $, undefined) {
// This pattern gives you the following benefits:
// * all variables defined in here are private
// * can safely minify global variables: window, jQuery & undefined
// * ensures that window, $, undefined mean what you expect
// * global variables are localized so lookups are faster
}(this, jQuery));
因此即使有人window = ‘Bob’
或快捷方式$
不等于jQuery
,而是原型库,此立即函数内的代码仍然可以正常工作。虽然你可能会想到“我从未将undefined
设置为其他东西”,但请记住,你并不是唯一一个将代码放入页面的人;您无法承担来自DoubleClick的广告脚本写得不好的问题,特别是当它很容易被阻止时。
JavaScript的全球范围就像一个公共厕所。你不能总是避免它,但试着限制你与表面的接触。
答案 1 :(得分:5)
你看到的是一个自我执行的功能:
var x = (function(bar){
return bar;
})('foo')
alert(x);
答案 2 :(得分:4)
通常会强制解析器将其视为函数表达式,而不是声明。
答案 3 :(得分:0)
这是因为通常代码如下所示:
(function(){/*code*/})();
额外括号的原因是这不是合法的语法:
function(){/*code*/}();
答案 4 :(得分:0)
正如@daniellmb所说,它需要立即执行功能。有关详细信息,请参阅explanation of expression closure。