jQuery脚本:function(window, document, undefined)与;(function($, window, document, undefined)的区别

5

我看到一些在网页中嵌入的jQuery脚本,它们会随着页面的加载而打开。

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

或者

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

我认为如果该脚本与其他文件连接在一起并且有一个缺失的闭合括号,就可能会出现;; 会停止缩小器从代码的第一行中删除内容。但我不确定。
那么,我发帖的两个变体怎么了?为什么人们会像这样打开他们的代码?为什么第一个示例中没有美元符号?

4
可能是因为在第一个案例中,jQuery没有被传递给函数作为参数。这完全取决于编写代码的人。至于分号,请参考:https://dev59.com/znNA5IYBdhLWcg3wQ7e4。 - Felix Kling
1个回答

5
那些是包装器,用于创建与脚本尽可能预测相符的环境。
在脚本末尾,您将看到函数表达式的结束括号,以及立即调用函数并为函数签名中定义的参数发送值的内容:
(function($, window, document, undefined){
 ...
})(jQuery, window, document);

如果您使用jQuery,应该包含$参数,否则不需要。如果您没有考虑包括它,则也不需要。如您所见,参数undefined没有任何值。当您没有传递参数的值时,它将被设置为undefined,因此在函数块内,命名为undefined的参数将具有值undefined。这样做的目的是因为在JavaScript的早期版本中,全局标识符undefined并非常量,因此在旧版浏览器中,可以给属性undefined赋值,从而使其不再表示undefined。(请注意,未定义任何值的参数将获得实际值undefined,而不是全局属性undefined的当前值。)正如您所怀疑的那样,开头的额外分号是为了保护脚本免受可能与之合并的其他脚本的影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接