5

我已经看到一些嵌入在打开的网页中的 jQuery 脚本

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

或者

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

我相信;如果脚本与其他文件连接并且缺少右括号,则可能存在,这会;阻止压缩器删除代码的第一行,但我不确定。

我发布的两个变种是怎么回事?为什么人们会这样打开他们的代码,为什么第一个示例缺少美元符号?

4

1 回答 1

5

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

在脚本的末尾,您将看到函数表达式的右括号,以及对函数的立即调用,该函数为函数签名中定义的参数发送值:

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

如果你使用 jQuery,你会包含它的$参数,否则不会。(或者如果你没想过包括它。)

如您所见,名为 的参数没有任何值undefined。当您不为参数传递值时,它将被设置为 value undefined,因此在功能块内命名的参数undefined将具有 value undefined。这样做的目的是因为全局标识符undefined在最近版本的 Javascript 之前不是一个常量,所以在旧浏览器中,您可以给属性undefined一个值,这样它就不再代表undefined了。(请注意,没有定义值的参数将获取实际值undefined,而不是全局属性的当前值undefined。)

正如您所怀疑的,开头的额外分号是为了保护脚本免受可能与之合并的其他脚本的影响。

于 2013-02-22T18:10:25.377 回答