2013-02-22 27 views
5

我看到嵌入到以

(function(window, document, undefined){... 

打开网页,一些jQuery的脚本
;(function ($, window, document, undefined) {... 

我相信;能在那边如果脚本是连接在一起的其他文件,并没有缺少一个右括号,从删除代码的第一行;停止minifier,但我不知道。

与我发布的两个变体有什么关系?为什么人们会这样打开他们的代码,为什么第一个例子会丢失美元符号?

+4

可能是因为在第一种情况下,'jQuery'没有作为参数传递给函数。这完全取决于编写代码的人。至于分号:http://stackoverflow.com/questions/1031718/what-is-the-consequence-of-this-bit-of-javascript。 – 2013-02-22 17:59:15

回答

5

这些都是为尽可能预测脚本创建环境的包装器。

在脚本,你将看到函数表达式右括号,并在在函数签名中定义的参数值发送函数直接调用的末尾:

(function($, window, document, undefined){ 
... 
})(jQuery, window, document); 

如果您使用jQuery,你将包括$参数,否则不包含。 (或者如果您没有考虑包含它)。

如您所见,名为undefined的参数没有任何值。如果您未传递参数值,则会将其设置为值undefined,因此在功能块内,名为undefined的参数的值将为undefined。这样做的目的是因为全球标识符undefined直到最近版本的Javascript才是常量,所以在较旧的浏览器中,您可以给属性undefined一个值,以便它不再代表undefined。 (请注意,没有定义值的参数将获得实际值undefined,而不是全局属性undefined的当前值。)

如您所怀疑的,开头的额外分号用于保护脚本免受其他脚本它可能会合并。