Next parameter is 'undefined' in jQuery, why?
在下面的jQuery代码中,为什么下一个参数是undefined
JavaScript的:
1 2 3
| (function(a,b){
....
})(window) |
这里a=window但是b=undefined,为什么会这样呢?
-
那不是jQuery。 这是JavaScript。 jQuery是一个JavaScript函数库(你没有在那里使用它)。 它使用的语言,以及您在那里使用的语言是JavaScript。
-
@ T.J.Crowder这是真的,但这实际上是jquery代码。 虽然我同意你的观点,但有太多人混淆了jquery和javascript,遗憾的是JSON也存在同样的问题。
-
@Christoph:对。 这是我向OP解释的重点。
-
你不是要问这个问题,第二个参数的名字字面上是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将不会被定义。
-
这意味着"你没有为第二个参数传递任何东西"?,我不明白。如果第二个参数无法通过,那么是否有必要保持未定义?
-
@blueghhgdtt看到我对这个问题的解释的答案。
-
如果不传递任何内容,则其值将为undefined(或不存在)。检查参数是否未定义实际上是一种非常常见的技术,可以查看是否已传入参数。
-
@blueghhgdtt:你将参数"传递"到一个函数中。所以在foo("bar");中,我们将值"bar""传递"到函数foo中。您的匿名函数接受两个参数,a和b。但是对它的调用(最后是parens中的位)只是传递了一个参数。该论点最终作为a进入函数。由于没有第二个参数传递给函数(它只是...(window),而不是...(window, somethingElse)),b保持其默认值undefined。
-
因为我们只是想通过'窗口'而我们从来没有'somethingElse'通过然后有必要保持'b''未定义'
-
任何人都可以向我解释这项技术或为我提供参考。
-
@blueghhgdtt:任何一个不错的JavaScript教程都会谈到这样一个事实:如果你有一个声明两个参数(function foo(a, b))的函数然后你只用一个(foo("bar"))调用它,那么b将是在通话中。
-
@TJCrowder,我知道你刚刚说了什么,但我想知道的是,如果我们只有一个参数要通过,那么我们为什么要用两个参数创建函数呢?
-
@blueghhgdtt我在回答中解释了为什么这样做了。如果您有任何其他问题,请随时提出
这是您尝试使用的即时javascript函数语法:
1
| (/* function body */)(/* params */) |
命名函数定义如下:
1 2 3
| function addNumbers(a, b){
alert(a + b);
} |
你叫它:
或类似的立即函数(同时定义和执行):
1 2 3
| (function(a, b){
alert(a + b);
})(1, 2) |
-
如果我们没有传递第二个参数2那么是否需要将b作为参数?
-
然后只需make(function(a){/ * code * /})(1)。
-
是的,那是对的,那么为什么jquery中的javascript代码只传递window但是function参数是a& b。为什么,不仅a?
-
是的,这也是有效的。"b"可用作可选参数。在这种情况下,您必须检查函数内部是否未定义b。上面的例子是:"if(b === undefined){alert(a)} else {alert(a + b);}"
-
检查b,undefined有什么好处!因为b总是undefined,我们只传递window参数,它等于a,b总是=到undefined。为什么jquery中的javascript将undefined参数传递给参数b?是什么原因或它的优点......
-
啊,你的问题不明确。它特定于jQuery初始化?那么这是重复的问题!阅读原始问题的答案。它现在链接到你的帖子。