我看到JQuery插件和其他javascript库文档设置如下:
(function($,window,undefined){
...plug-in code...
});
Run Code Online (Sandbox Code Playgroud)
为什么有必要将脚本包装在一个函数中,该函数可以接收哪些args?
收到的args是:
(function($,window,undefined){
//..
})(jQuery, window);
Run Code Online (Sandbox Code Playgroud)
$:jQuery对象的引用,通常用于将其作为$别名引用,因为在外部作用域中代码可能处于"兼容模式".
window:该window参数通常用于缩短标识符查找.在浏览器脚本中window是全局对象的属性,为了解决它,标识符解析过程必须检查每个范围,直到它到达全局范围.如果我们window作为参数添加,无论我们的函数如何嵌套,查找都会很短.
在非浏览器脚本环境中,window标识符甚至不存在,并且该模式是跟踪Global对象的常用方法,例如:
(function (global, undefined) {
//..
})(this);
Run Code Online (Sandbox Code Playgroud)
请注意,全局代码(不是函数代码)的this值始终引用全局对象.
undefined:最后但并非最不重要的是,undefined论证,它被用作"安全措施",因为undefined它也是Global对象的属性,而在ECMAScript第3版规范中,它的值是可变的,可以想象:
undefined = true;
Run Code Online (Sandbox Code Playgroud)
这会搞乱你的代码,但如果我们有一个参数,并且我们没有传递任何东西,它将保持未定义的值.
幸运的是,它已在ECMAScript第5版规范上修复undefined,Infinity并且NaN不再可写.:)