jQuery脚本:函数(窗口,文档,未定义)vs;(函数($,window,document,undefined)

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

本文关键字:函数 window vs document undefined 文档 脚本 窗口 jQuery 未定义      更新时间:2023-09-26

我看到一些jQuery脚本嵌入到使用打开的网页中

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

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

我相信,如果脚本与其他文件连接,并且缺少右括号,;可能会出现,;会阻止缩小程序删除代码的第一行,但我不确定。

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

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

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

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

如果使用jQuery,则会为其包含$参数,否则不会。(或者如果你没有想过把它包括在内。)

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

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