Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript函数中使用被忽略的参数的目的/好处是什么?_Javascript_Jquery - Fatal编程技术网

在JavaScript函数中使用被忽略的参数的目的/好处是什么?

在JavaScript函数中使用被忽略的参数的目的/好处是什么?,javascript,jquery,Javascript,Jquery,为了避免误解,这个问题不是关于在JS函数中允许可选参数 我的问题是由jQueryparseXML函数引起的,该函数在jQuery.js中定义如下: // Cross-browser xml parsing // (xml & tmp used internally) parseXML: function( data, xml, tmp ) { ... } 在函数体中,参数xml和tmp都是在使用之前分配的。这意味着它们被用作局部变量,因此函数可以这样定义: parseXML

为了避免误解,这个问题不是关于在JS函数中允许可选参数

我的问题是由jQuery
parseXML
函数引起的,该函数在
jQuery.js
中定义如下:

// Cross-browser xml parsing
// (xml & tmp used internally)
parseXML: function( data, xml, tmp ) { 
   ... 
} 
在函数体中,参数
xml
tmp
都是在使用之前分配的。这意味着它们被用作局部变量,因此函数可以这样定义:

parseXML: function(data) { 
   var xml, tmp;
   ... 
}

第一种方法的好处是什么,除了在缩小版的
jQuery.js
中保存几个字符之外?

通常,如果要将此函数作为回调或延续传递给另一个函数,您可以向函数添加未使用的参数以符合某些预先约定的函数签名,API合同说“我用这些参数调用回调”,你不需要所有的参数来做你想在回调中做的事情。(这适用于任何语言,而不仅仅是JavaScript。)

在这种情况下,我不知道。如何使用parseXML;它是直接调用还是用作其他可能需要3参数函数的函数的参数?

(xml&tmp内部使用)

你误解了意思。它们不是指函数中的“内部”。他们的意思是在图书馆内部。此函数的公共API有一个参数(数据)。此函数的私有API有3个参数


这在jQuery中很常见。一般来说,这些功能可以有副作用也可以没有副作用。没有副作用的API是公开的,jQuery本身将传递更多的参数以产生副作用,这是用户不应该做的

如果我们定义两个函数

function a ( foo ) { }
function b ( foo, bar, baz ) {}
…他们会报告不同的

很少有人使用javascript


但是,除了从缩小的文件大小上减少几个字节之外,这是我能想到的唯一其他原因。

@fireeydboy-因为它们是在被访问之前设置的,所以我不确定如何将它们用于递归。我认为Joel已经正确地找到了他自己问题的答案——只保留了几个字符。@fireeyedboy-parseXML不是recursive@Joel:好吧,至少我们已经解决了@Ender:考虑到以下情况在递归函数中并不少见:
function recursiveFunction($node,$level=0)
在其他语言中,在Javascript中不允许这样设置参数的默认值,我可以很好地想象Javascript中的递归函数启动可选参数。然而,在许多情况下,简单检查
未定义的
(或者是
空的
?我一直在Javascript中混用它们)可能就足够了。@Ender-我想知道是否有一些性能差异。看起来很简单,但我不知道,也不是这样。JavaScript不关心您是否传递了它所期望的所有参数,或者传递的参数是否超过了它所期望的。看一下这个演示来证明:是的,我相信你没有寻找证据。我只是描述了你可能这样做的原因,虽然我猜在JS中这不是一个有效的理由。(另外,我查看了jQuery.js源代码,并回答了我自己关于如何使用parseXML的问题:它可以用作其他函数的参数,但它们只能传递第一个参数。)+1用于澄清“内部使用”的预期含义。因此,基本上,有些函数具有可选参数,这些参数不是公共API的一部分。但是,在
parseXML
的情况下,“额外”参数不会产生副作用,因为它们在使用之前会被覆盖。也许在早期版本中,它们被用来引起副作用。
console.log( [a.length, b.length] ); // logs [1, 3]