繁体   English   中英

帮助理解javascript约定

[英]Help understanding javascript convention

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

(function($,window,undefined){
    ...plug-in code...
});

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

收到的args是:

(function($,window,undefined){
  //..
})(jQuery, window);

$ :jQuery对象的引用,通常用于将其称为$别名,因为在外部作用域中代码可能处于“兼容模式”。

windowwindow参数通常用于缩短标识符查找。 在浏览器脚本中, window是全局对象的属性,为了解决它,标识符解析过程必须检查每个范围,直到它到达全局范围。 如果我们将window添加为参数,则无论我们的函数如何嵌套,查找都会很短。

在非浏览器脚本环境中, window标识符甚至不存在,并且该模式是跟踪Global对象的常用方法,例如:

(function (global, undefined) {
  //..
})(this);

请注意, 全局代码 (不是函数代码)的this值始终引用全局对象。

undefined :最后但并非最不重要的是, undefined参数,它被用作“安全措施”,因为undefined也是Global对象的属性,而在ECMAScript第3版规范中,它的值是可变的,可以想象:

undefined = true;

这会搞乱你的代码,但如果我们有一个参数,并且我们没有传递任何东西,它将保持未定义的值

幸运的是,ECMAScript第5版规范已修复, undefinedInfinityNaN不再可写。 :)

除了全局之外,Javascript中唯一的范围是函数范围。 在函数中包装代码块是确保变量不会泄漏到其余代码中的唯一方法

函数接收参数的唯一方法是,只要它被定义就被调用(实际上,这是该函数执行代码的唯一方法):

(function($,window,undefined){
    ...plug-in code...
})(jQuery,this,...);

原因在于doc:

要确保您的插件不会与可能使用美元符号的其他库发生冲突,最好将jQuery传递给自动执行函数(闭包),该函数将其映射到美元符号,以便它不会被覆盖执行范围内的另一个库。

请阅读: http//docs.jquery.com/Plugins/Authoring

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM