jQuery脚本:function(window,document,undefined)vs;(function($,window,document,undefined)

Sve*_*ven 5 javascript jquery

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

(function(window, document, undefined){...
Run Code Online (Sandbox Code Playgroud)

要么

;(function ( $, window, document, undefined ) {...
Run Code Online (Sandbox Code Playgroud)

我相信;如果脚本与其他文件连接并且有一个缺少的结束括号,那么可能会存在,这会;阻止minifier删除代码的第一行,但我不确定.

我发布的两个变种是什么?为什么人们这样打开他们的代码,为什么第一个例子错过了美元符号?

Guf*_*ffa 5

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

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

(function($, window, document, undefined){
 ...
})(jQuery, window, document);
Run Code Online (Sandbox Code Playgroud)

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

如您所见,名称参数没有任何值undefined.如果没有为参数传递值,则会将其设置为值undefined,因此在功能块中,名为的参数undefined将具有该值undefined.这样做的目的是因为全局标识符undefined在Javascript的最新版本之前不是常量,因此在旧版浏览器中,您可以为属性赋予undefined一个值,使其不再代表undefined.(请注意,没有定义值的参数将获得实际值undefined,而不是全局属性的当前值undefined.)

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