帮助理解javascript约定

Yar*_*rin 2 javascript

我看到JQuery插件和其他javascript库文档设置如下:

(function($,window,undefined){
    ...plug-in code...
});
Run Code Online (Sandbox Code Playgroud)

为什么有必要将脚本包装在一个函数中,该函数可以接收哪些args?

CMS*_*CMS 6

收到的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不再可写.:)