我看到jQuery插件和其他javascript库文档是这样设置的:
(function($,window,undefined){
...plug-in code...
});
为什么要把脚本包裹在一个函数里,那个函数能接收什么args?
最佳答案
收到的参数是:
(function($,window,undefined){
//..
})(jQuery, window);
$
:jQuery 对象的引用,通常是为了能够将其作为 $
别名来引用,因为在外部范围代码可能处于“兼容模式”。
window
:window
参数通常用于缩短 标识符查找。在浏览器脚本中 window
是全局对象的属性,为了解析它,标识符解析过程必须检查每个范围,直到它到达全局范围。如果我们添加 window
作为参数,无论我们的函数嵌套多深,查找都会很短。
在非浏览器脚本环境中,window
标识符甚至不存在,该模式是跟踪全局对象的常用方式,例如:
(function (global, undefined) {
//..
})(this);
请注意,全局代码(不是函数代码)的 this
值始终引用全局对象。
undefined
:最后但同样重要的是,undefined
参数,它被用作“安全措施”,因为 undefined
也是 Global 对象的一个属性,在 ECMAScript 3rd Edition Specification 中,它的值是可变的,imagine:
undefined = true;
那会弄乱你的代码,但如果我们有一个参数,并且我们没有传递任何东西给它,它将保存未定义的值。
幸运的是,ECMAScript 第 5 版规范已修复此问题,undefined
、Infinity
和 NaN
不再可写。 :)
关于javascript - 帮助理解 javascript 约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4195881/