在下面的代码中jQuery
,为什么下一个参数是undefined
JavaScript:
(function(a,b){
....
})(window)
这里a=window
可是b=undefined
,为什么会这样呢?
在下面的代码中jQuery
,为什么下一个参数是undefined
JavaScript:
(function(a,b){
....
})(window)
这里a=window
可是b=undefined
,为什么会这样呢?
这是一种常见的技术,可以确保您有一个真正的undefined
值来检查,因为undefined
window 对象的属性曾经是可写的,因此不能可靠地用于检查。由于只有一个参数被传递给函数,所以第二个参数肯定是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)