就这样没有误解,这个问题不是关于在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
中保存几个字符外,第一种方式有什么好处呢?
答案 0 :(得分:3)
如果我们定义两个函数......
function a ( foo ) { }
function b ( foo, bar, baz ) {}
......他们会报告不同的length
s ...
console.log( [a.length, b.length] ); // logs [1, 3]
很少见到使用javascript的this little known feature。
但除了缩小缩小文件大小的几个字节外,这是我能想到的唯一其他原因。
答案 1 :(得分:1)
通常,您可以将未使用的参数添加到函数中以符合某些预先约定的函数签名,如果您要将此函数作为回调或继续传递给另一个函数,并且API契约说“我调用使用这些参数进行回调“,并且您不需要所有参数来执行您在回调中要执行的操作。 (这适用于任何语言,而不仅仅是JavaScript。)
在这个具体案例中,我不知道。如何使用parseXML;是直接调用,还是用作可能期望3参数函数的其他函数的参数?
答案 2 :(得分:1)
(xml & tmp used internally)
你误解了意思。它们并不意味着在函数内部“内部”。它们指的是图书馆内部。该函数的公共API有一个参数(数据)。该函数的私有API有3个参数。
这在jQuery中很常见。通常,这些功能可以有或没有副作用。没有副作用的API是公共的,jQuery本身将传递更多参数,以引起您作为用户不应该做的副作用。