javascript参数和自定义选项之间是否有区别?

时间:2012-02-08 18:41:15

标签: javascript jquery parameters arguments

通过默认的'参数'访问javascript参数是否有区别?并使用明确的对象,例如' options'?

除了访问数组参数和另一个访问对象选项之外,这两个是否类似?

$.fn.myFn = function(){
  if arguments[0]//....
}

$.fn.myFn = function(options){
  if options.value //....
}

6 个答案:

答案 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慢的更多信息。当然,调用开销在大多数情况下并不重要,所以大部分时间这无关紧要。但是对于那些时代,这是我和其他人的结果:

enter image description here

正如您所看到的,到目前为止,使用声明的参数在所有引擎上都是最快的。我甚至投入了将arguments与传入数组进行比较的事情,因为那些时候你真的需要一些可变数量的参数(答案:你最好使用数组)。

答案 1 :(得分:2)

不同之处在于,在第一种情况下arguments是传递给函数的arguents的实际列表,在第二种情况下,option只是参数之一(arguments[0])并且它包含按惯例的实际“论据”。

与Python之类的语言不同,Javascript不提供混合关键字和位置参数的插入方式。

答案 2 :(得分:2)

使用arguments会使您的函数运行速度变慢,但只有在您调用该函数时才会发现差异。只在函数中需要变量参数时才使用它。此外,当您不需要变量参数时使用参数会使您更难理解,因为您没有变量名称。

答案 3 :(得分:1)

正式来说,区别在于$.fn.myFn.length01(因为函数在第一种情况下定义为0参数,在第二种情况下定义为1参数),尽管你通常不需要这个属性。

除此之外,两者都是平等的。

答案 4 :(得分:1)

显然,@missigno指出存在一些语法差异。但是如果你问为什么要做其中一个 - 显式对象方法是一种在javascript中提供命名参数的方法。

如果您可以拥有大量参数,这可能很有用,但大多数情况下只需要指定一些参数。有些人也因为审美原因而更喜欢它 - 选项的名称与其值一起显示,因此您不必仅知道例如参数3的作用。

答案 5 :(得分:1)

基本上,arguments允许您期望传递给您的函数的未知数量的参数。一个快速的头顶示例位于GetSum()函数中,该函数返回您一次性传入的所有数字的总和。

另一方面,

options允许您为函数指定命名参数,而无需显式顺序。这是特别方便的,例如,在扩展现有功能时,无需担心与严格功能签名的冲突/向后兼容性。