在()之间包含js函数?

时间:2011-04-01 20:24:29

标签: javascript

  

可能重复:
  Difference between (function(){})(); and function(){}();

谷歌我已经看过很多了:

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

为什么他们将自己的功能包含在parethesis中? 区别在于:

function(){/*code*/}

修改

好的问题应该是这样的:

为什么他们将代码包含在内:

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

而是将代码直接写入js流程?
有什么好处,不同的行为?

5 个答案:

答案 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