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

Pet*_*_ch 3 javascript parameters jquery arguments

通过默认的'arguments'访问javascript参数并使用诸如'options'之类的显式对象有区别吗?

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

$.fn.myFn = function(){
  if arguments[0]//....
}
Run Code Online (Sandbox Code Playgroud)

$.fn.myFn = function(options){
  if options.value //....
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 10

是的,他们是相似的,但他们也是不同的.我不会arguments用于任何真正不需要处理可变数量参数的东西; 我使用声明的参数和/或options对象.(另请注意,在大多数JavaScript引擎上,使用arguments伪数组[它不是真正的数组] 与使用声明的参数甚至是对象相比会导致运行时速度损失options.请参阅下面的"旁注",当然您必须为现实世界中的重要事项调用函数很多.)

对只接受几个参数的函数使用声明的参数通常是有意义的,例如:

x = parseInt(str, 10);
Run Code Online (Sandbox Code Playgroud)

如果parseInt使用的是options-style对象,则必须将其写为:

x = parseInt({string: str, radix: 10}); // Note: parseInt doesn't actually work this way
Run Code Online (Sandbox Code Playgroud)

......或者类似的,每次通话都要打字.所以这是一个缺点.

但是当你进入大量的参数,特别是大量的可选参数时,使用options传递对象而不是离散参数的模式可以获得真正的收益.考虑jQuery ajax函数.它有~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
);
Run Code Online (Sandbox Code Playgroud)

...无论是.:-)

我听说过离散论证与options风格对象的一个经验法则是当你得到四个论点时,人们会开始迷路.当然,你会想要画出自己的台词.


旁注:有关arguments比声明的args慢的更多信息,请尝试此测试.当然,在大多数情况下,呼叫开销并不重要,因此大多数时候这并不重要.但是对于那些时代,这是我和其他人的结果:

在此输入图像描述

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