[英]Help understanding javascript convention
我看到JQuery插件和其他javascript库文档设置如下:
(function($,window,undefined){
...plug-in code...
});
为什么有必要将脚本包装在一个函数中,该函数可以接收哪些args?
收到的args是:
(function($,window,undefined){
//..
})(jQuery, window);
$
:jQuery对象的引用,通常用于将其称为$
别名,因为在外部作用域中代码可能处于“兼容模式”。
window
: window
参数通常用于缩短标识符查找。 在浏览器脚本中, window
是全局对象的属性,为了解决它,标识符解析过程必须检查每个范围,直到它到达全局范围。 如果我们将window
添加为参数,则无论我们的函数如何嵌套,查找都会很短。
在非浏览器脚本环境中, window
标识符甚至不存在,并且该模式是跟踪Global对象的常用方法,例如:
(function (global, undefined) {
//..
})(this);
请注意, 全局代码 (不是函数代码)的this
值始终引用全局对象。
undefined
:最后但并非最不重要的是, undefined
参数,它被用作“安全措施”,因为undefined
也是Global对象的属性,而在ECMAScript第3版规范中,它的值是可变的,可以想象:
undefined = true;
这会搞乱你的代码,但如果我们有一个参数,并且我们没有传递任何东西,它将保持未定义的值 。
幸运的是,ECMAScript第5版规范已修复, undefined
, Infinity
和NaN
不再可写。 :)
除了全局之外,Javascript中唯一的范围是函数范围。 在函数中包装代码块是确保变量不会泄漏到其余代码中的唯一方法
函数接收参数的唯一方法是,只要它被定义就被调用(实际上,这是该函数执行代码的唯一方法):
(function($,window,undefined){
...plug-in code...
})(jQuery,this,...);
原因在于doc:
要确保您的插件不会与可能使用美元符号的其他库发生冲突,最好将jQuery传递给自动执行函数(闭包),该函数将其映射到美元符号,以便它不会被覆盖执行范围内的另一个库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.