下一个参数是'undefined'在jQuery中,为什么
Next parameter is 'undefined' in jQuery, why?
在jQuery
的代码中,为什么下一个参数是undefined
(function(a,b){
....
})(window)
这里是a=window
而不是b=undefined
,为什么是这样?
这是一种常见的技术,以确保您有一个真正的undefined
值来检查,因为窗口对象的undefined
属性过去是可写的,因此不能可靠地用于检查。由于只向函数传递了一个参数,因此第二个参数确保为undefined
。该变量的名称无关紧要,它可以是undefined
,也可以是foobar
,或者像本例中一样,b
(因为这是节省宝贵字节的最短方法)。
现在您可以安全地检查变量的未定义,因为您确定b的值:
// overwriting the global undefined property works in old browsers
undefined = 3;
(function(a,b){
var asd; // not initialised, thus undefined
if (asd === undefined){
// should trigger, but won't because undefined has been overwritten to 3
}
if (asd === b){
// is safe, bcause you know that b is undefined
}
})(window)
新浏览器(IE9, FF4+, Chrome)遵守EcmaScript5规范,undefined
不再是可写的
因为您没有为第二个参数传递任何内容。你只经过一个,即window
。
(function(a,b){
....
})(window)
定义一个函数并立即调用它。上面的最后一行实际上使用window
参数调用函数。如果你在那里传递了2个参数,b
将不是未定义的
这是你试图使用的即时javascript函数语法:
(/* function body */)(/* params */)
命名函数定义如下:
function addNumbers(a, b){
alert(a + b);
}
你叫它:
addNumbers(1, 2)
或类似的即时函数(同时定义和执行):
(function(a, b){
alert(a + b);
})(1, 2)
相关文章:
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- 为什么jQuery文件的函数中有两个参数,但只接收一个参数
- 为什么jquery悬停在jsfiddle中可以工作,而在我的html布局中却不能
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JQuery - 为什么 JQuery 动画是同时进行的
- 为什么jQuery代码段在没有IFrame的情况下可以工作,而在有IFrame时却不能工作
- 为什么jQuery悬停方法在这种情况下不起作用
- 为什么jQuery appendTo会删除现有的列表项
- 为什么Jquery点击功能需要2次点击
- 为什么jQuery下拉列表需要单击两次
- 为什么jQuery正在删除文本的最后一个字符
- 为什么jQuery不处理附加内容
- 为什么 jquery 没有加载
- 为什么 jQuery $('#selector').width(1) 应用 17px 而不是 1px
- 为什么jQuery只在某些链接中输入函数
- 为什么 JQuery 脚本不删除表行
- 为什么Jquery parseXML不起作用
- 为什么Jquery UI会擦除我的输入框
- 为什么jQuery验证“;远程:“;验证需要一个函数来设置数据值
- 为什么jQuery.cookie插件返回“[object object]”