通过默认的'参数'访问javascript参数是否有区别?并使用明确的对象,例如' options'?
除了访问数组参数和另一个访问对象选项之外,这两个是否类似?
$.fn.myFn = function(){
if arguments[0]//....
}
和
$.fn.myFn = function(options){
if options.value //....
}
答案 0 :(得分:10)
是的,它们相似,但它们也不同。我不会将arguments
用于任何不需要处理变量数字参数的事情;我将使用声明的参数和/或options
对象。 (另请注意,在大多数JavaScript引擎上,使用arguments
伪数组[它不是真正的数组] incurs a runtime speed penalty与使用声明的参数或甚至是options
对象进行比较。注意“下面,虽然当然你必须将函数称为 lot ,因为这个开销在现实世界中很重要。”
对只接受几个参数的函数使用声明的参数通常是有意义的,例如:
x = parseInt(str, 10);
如果parseInt
使用了options
- 样式的对象,则必须将其写为:
x = parseInt({string: str, radix: 10}); // Note: parseInt doesn't actually work this way
...或类似的,每次通话都要打字。这是一个缺点。
但是当你进入 lot 的参数,特别是许多可选参数时,使用传递对象而不是离散参数的options
模式可以获得真正的收益。考虑jQuery ajax
function。它有 ~32个选项你可以传递给它,几乎所有选项都是可选的。正如您可能不希望如上所述对每个parseInt
进行编码一样,您可能不希望对每个ajax
调用进行编码,如下所示:
$.ajax(
"/path/to/resource",
function(data) {
},
undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined
);
...任一。 : - )
我听说过对于options
- 样式对象的离散参数的一个经验法则是当你得到四个参数时,人们会开始迷路。当然,你会想要画出自己的一行。
附注:有关arguments
比声明的args try this test慢的更多信息。当然,调用开销在大多数情况下并不重要,所以大部分时间这无关紧要。但是对于那些时代,这是我和其他人的结果:
正如您所看到的,到目前为止,使用声明的参数在所有引擎上都是最快的。我甚至投入了将arguments
与传入数组进行比较的事情,因为那些时候你真的需要一些可变数量的参数(答案:你最好使用数组)。
答案 1 :(得分:2)
不同之处在于,在第一种情况下arguments
是传递给函数的arguents的实际列表,在第二种情况下,option只是参数之一(arguments[0]
)并且它包含按惯例的实际“论据”。
与Python之类的语言不同,Javascript不提供混合关键字和位置参数的插入方式。
答案 2 :(得分:2)
使用arguments
会使您的函数运行速度变慢,但只有在您调用该函数时才会发现差异。只在函数中需要变量参数时才使用它。此外,当您不需要变量参数时使用参数会使您更难理解,因为您没有变量名称。
答案 3 :(得分:1)
正式来说,区别在于$.fn.myFn.length
是0
或1
(因为函数在第一种情况下定义为0参数,在第二种情况下定义为1参数),尽管你通常不需要这个属性。
除此之外,两者都是平等的。
答案 4 :(得分:1)
显然,@missigno指出存在一些语法差异。但是如果你问为什么要做其中一个 - 显式对象方法是一种在javascript中提供命名参数的方法。
如果您可以拥有大量参数,这可能很有用,但大多数情况下只需要指定一些参数。有些人也因为审美原因而更喜欢它 - 选项的名称与其值一起显示,因此您不必仅知道例如参数3的作用。
答案 5 :(得分:1)
基本上,arguments
允许您期望传递给您的函数的未知数量的参数。一个快速的头顶示例位于GetSum()
函数中,该函数返回您一次性传入的所有数字的总和。
options
允许您为函数指定命名参数,而无需显式顺序。这是特别方便的,例如,在扩展现有功能时,无需担心与严格功能签名的冲突/向后兼容性。