jQuery中的下一个参数是'undefined',为什么?

时间:2013-03-01 08:10:13

标签: javascript jquery

在以下jQuery代码中,为什么下一个参数为undefined

JavaScript的:

(function(a,b){
    ....
})(window)

a=windowb=undefined,为什么会这样?

3 个答案:

答案 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)