通过默认“参数”访问 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 .现在当然,调用开销大多数时候并不重要,所以大多数时候这并不重要。但在那些时候,这是我和其他人的结果:
如您所见,使用声明的参数是目前几乎所有引擎中最快的。我什至加入了一些东西,将 arguments
与传入数组进行比较,在那些时候你确实需要可变数量的参数(答案:你最好使用数组)。
关于javascript - 作为参数的 javascript 参数和自定义选项之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199447/