我看到一些jQuery脚本嵌入在用
打开的网页中(function(window, document, undefined){...
或
;(function ( $, window, document, undefined ) {...
我相信如果脚本与其他文件连接并且缺少右括号,;
可能会出现;
,{{1}}会阻止缩小器删除代码的第一行,但我我不确定。
我发布的两个变种是什么?为什么人们这样打开他们的代码,为什么第一个例子错过了美元符号?
答案 0 :(得分:5)
这些是为脚本创建尽可能可预测的环境的包装器。
在脚本结束时,您将看到函数表达式的结束括号,以及对函数签名中定义的参数值发送函数的立即调用:
(function($, window, document, undefined){
...
})(jQuery, window, document);
如果你使用jQuery,你会为它包含$
参数,否则不包括undefined
参数。 (或者,如果你没想到包括它。)
如您所见,名为undefined
的参数没有任何值。如果未传递参数值,则会将其设置为值undefined
,因此在功能块内,名为undefined
的参数将具有值undefined
。这样做的目的是因为全局标识符undefined
在Javascript的最新版本之前不是常量,因此在旧版浏览器中,您可以为属性undefined
赋予一个值,使其不代表{{ 1}}了。 (请注意,没有定义值的参数将获得实际值undefined
,而不是全局属性undefined
的当前值。)
正如您所怀疑的那样,开头的额外分号是为了保护脚本免受可能与其合并的其他脚本的影响。