在以下jQuery
代码中,为什么下一个参数为undefined
JavaScript的:
(function(a,b){
....
})(window)
a=window
但b=undefined
,为什么会这样?
答案 0 :(得分:6)
因为您没有为第二个参数传递任何内容。你只传递一个,即window
。
您的代码
(function(a,b){
....
})(window)
定义一个函数并立即调用它。上面的最后一行实际上使用window
参数调用该函数。如果您在那里传递了2个参数,则b
将不会被定义。
答案 1 :(得分:6)
这是一种常见的技术,可以确保您有一个真正的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
不再可写。
答案 2 :(得分:1)
这是您尝试使用的即时javascript函数语法:
(/* function body */)(/* params */)
命名函数定义如下:
function addNumbers(a, b){
alert(a + b);
}
你称之为:
addNumbers(1, 2)
或类似的立即函数(同时定义和执行):
(function(a, b){
alert(a + b);
})(1, 2)