javascript - 作为参数的 javascript 参数和自定义选项之间有区别吗?

标签 javascript jquery parameters arguments

通过默认“参数”访问 javascript 参数与使用显式对象(如“选项”)有区别吗?

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

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

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

最佳答案

是的,它们很相似,但也有不同。我不会将 arguments 用于任何不需要处理变量 numbers 的参数;我会使用声明的参数和/或 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

...或类似的,每次通话时输入更多。所以这是一个缺点。

但是当您遇到很多参数,尤其是很多可选参数时,使用options 模式,您传入一个对象而不是离散参数可以有真正的 yield 。考虑 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
);

...要么。 :-)

我听说过关于离散参数与 选项 样式对象的一条经验法则是,当你有四个参数时,人们就会开始迷失方向。当然,您需要自己画线。


旁注:关于arguments 比声明的 args 慢的更多信息,try this test .现在当然,调用开销大多数时候并不重要,所以大多数时候这并不重要。但在那些时候,这是我和其他人的结果:

enter image description here

如您所见,使用声明的参数是目前几乎所有引擎中最快的。我什至加入了一些东西,将 arguments 与传入数组进行比较,在那些时候你确实需要可变数量的参数(答案:你最好使用数组)。

关于javascript - 作为参数的 javascript 参数和自定义选项之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199447/

相关文章:

javascript - 访问jquery中设置的所有输入元素值属性

javascript - 函数超时

javascript - 在以下情况下,为什么下拉菜单没有根据从选择框中选择的值隐藏和显示?

java - 向 java 构造函数与方法发送参数

templates - Teamcity - 从模板中强制配置配置参数

javascript - 基于一个公共(public)键angular 2合并2个数组

javascript - 在纯 Javascript 中遍历多维数组

javascript - 仅当没有被任何处理程序阻止时才触发事件?

javascript - 使用 “each” 元素通过 JQuery 过滤表

node.js - CoffeeScript 传递 require() 参数错误