关于javascript:jQuery中的下一个参数是’undefined’,为什么?

Next parameter is 'undefined' in jQuery, why?

本问题已经有最佳答案,请猛点这里访问。

在下面的jQuery代码中,为什么下一个参数是undefined

JavaScript的:

1
2
3
(function(a,b){
    ....
})(window)

这里a=window但是b=undefined,为什么会这样呢?


这是一种常见的技术,可以确保您具有要检查的真实undefined值,因为窗口对象的undefined属性以前是可写的,因此无法可靠地用于检查。由于只有一个参数被移交给函数,所以第二个参数被确保为undefined。该变量的名称无关紧要,它可以是undefined,但也可以是foobar,或者在这种情况下,(因为这是节省宝贵字节的最短方式)b

现在您可以安全地检查变量的不确定性,因为您确定b的值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 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

你的代码

1
2
3
(function(a,b){
    ....
})(window)

定义一个函数并立即调用它。上面的最后一行实际上使用window参数调用该函数。如果在那里传递2个参数,b将不会被定义。


这是您尝试使用的即时javascript函数语法:

1
(/* function body */)(/* params */)

命名函数定义如下:

1
2
3
function addNumbers(a, b){
    alert(a + b);
}

你叫它:

1
addNumbers(1, 2)

或类似的立即函数(同时定义和执行):

1
2
3
(function(a, b){
    alert(a + b);
})(1, 2)