Javascript 是否在()之间封装js函数?

Javascript 是否在()之间封装js函数?,javascript,Javascript,可能重复: 我在谷歌上看到了很多: (function(){/*code*/}) 为什么他们把他们的功能放在parethesis里面? 这两者之间的区别是什么: function(){/*code*/} ? 编辑 好的,问题应该是: 他们为什么将代码包含在此中: (function(){/*code*/})(); 而是直接将代码写入js流? 有什么好处和不同的行为吗?通常会强制解析器将其视为函数表达式而不是声明。您看到的是一个自执行函数: var x = (function(bar){

可能重复:

我在谷歌上看到了很多:

(function(){/*code*/})
为什么他们把他们的功能放在parethesis里面? 这两者之间的区别是什么:

function(){/*code*/}
?

编辑 好的,问题应该是:

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

(function(){/*code*/})();
而是直接将代码写入js流?

有什么好处和不同的行为吗?

通常会强制解析器将其视为函数表达式而不是声明。

您看到的是一个自执行函数:

var x = (function(bar){
    return bar;
})('foo')

alert(x);

这是因为代码通常如下所示:

(function(){/*code*/})();
加括号的原因是这不是合法的语法:

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

我通常使用即时函数来控制变量范围,以免污染全局名称空间。这是一个非常有用的模式

(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
,而是原型库,此立即函数中的代码仍能正常工作。虽然你可能会想“我从来没有将
未定义的
设置为其他内容”,但请记住,你不是唯一一个将代码放入页面的人;你无法承受DoubleClick带来的糟糕的广告脚本,尤其是当它很容易被阻止的时候


JavaScript的全局范围就像一个公共厕所。你不能总是避免它,但要尽量限制你与表面的接触。

正如@daniellmb所说,这是立即发挥作用所必需的。有关更多信息,请参阅。

正如我对他说的那样:为什么他们要这么做,不能直接添加代码?哈哈。我很高兴今天我投了更高的票。快乐4/1从这样。@yes123:如果它有效,你可以做任何你想做的事。但是这是一个很好的例子,你应该熟悉这类代码。它们在JS世界中也被称为“iffees”。iLife立即调用了你应该详细说明的功能。即,
函数foo(){}
在全局范围内,可以通过
foo()
调用,而
(函数栏(){})
不在全局范围内。调用
bar()
将导致运行时错误。