帮助理解javascript约定

帮助理解javascript约定,javascript,Javascript,我看到JQuery插件和其他javascript库文档的设置如下: (function($,window,undefined){ ...plug-in code... }); 为什么有必要将脚本包装到函数中,以及该函数可以接收哪些参数?Javascript中除全局之外的唯一作用域是函数作用域。将代码块包装到函数中是确保变量不会泄漏到其余代码中的唯一方法 函数可以接收参数的唯一方式是在定义后立即调用它(实际上,这是该函数执行代码的唯一方式): 原因在文件中: 确保你的插件不会 与其他 可

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

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

为什么有必要将脚本包装到函数中,以及该函数可以接收哪些参数?

Javascript中除全局之外的唯一作用域是函数作用域。将代码块包装到函数中是确保变量不会泄漏到其余代码中的唯一方法

函数可以接收参数的唯一方式是在定义后立即调用它(实际上,这是该函数执行代码的唯一方式):


原因在文件中:

确保你的插件不会 与其他 可以用美元符号,这是最好的 练习将jQuery传递给self 执行映射的函数(闭包) 它是美元符号,所以它不可能是 被中的另一个库覆盖 执行范围

阅读此处:

收到的参数是:

(function($,window,undefined){
  //..
})(jQuery, window);
$
:jQuery对象的引用,通常用于将其称为
$
别名,因为在外部范围中,代码可能处于“兼容模式”

窗口
窗口
参数通常用于缩短标识符查找。在浏览器脚本
窗口中
是全局对象的属性,为了解析它,标识符解析过程必须检查每个作用域,直到它到达全局作用域。如果我们添加
window
作为一个参数,那么无论我们的函数有多嵌套,查找都会很短

在非浏览器脚本环境中,
窗口
标识符甚至不存在,该模式是跟踪全局对象的常用方式,例如:

(function (global, undefined) {
  //..
})(this);
请注意,全局代码(非功能代码)的
值始终指的是全局对象

未定义
:最后但并非最不重要的是,
未定义
参数用作“安全度量”,因为
未定义
也是全局对象的一个属性,在ECMAScript第三版规范中,其值是可变的,在引擎中:

undefined = true;
这会弄乱您的代码,但是如果我们有一个参数,并且没有向它传递任何内容,它将保留未定义的值


幸运的是,这在ECMAScript第5版规范中得到了修复,
undefined
Infinity
NaN
不再可写

哇,我不知道那里的未定义部分。奇怪的是,undefined是可变的。
typeof myVar==“undefined”
几乎是使用最安全的比较,但是这个安全措施到位了,这很好。@Matt,是的,在ECMAScript 3上有点不好,
undefined
不是
null
true
false
,而不是一个文本,是全局对象的一个可写属性:(所以……您要说的是,在ECMAScript 3中,未定义的是定义的。;)
undefined = true;