单独接受参数与数组接受

时间:2011-05-19 14:31:44

标签: javascript

各自的优点和缺点是什么?

例如:my_func(a,b,c,d,e)vs my_func(params)。

一般来说,我喜欢前者,因为intellisense可以为使用IDE的人检测它。而使用第二种方法需要开发人员查找文档。但是,我注意到Facebook的JS SDK大量使用后者。

3 个答案:

答案 0 :(得分:1)

这取决于你传递的是什么,如果它是一组相关的参数,那么数组是有用的。许多jQuery插件将一组选项收集为关联数组,然后收集其他方法。我通常在编写插件时这样做:

var options = { option1: 'stuff', option2: 'etc' };
$('#id').myPlugin(options, 'disengage');

第二个参数是您希望插件执行的操作。

答案 1 :(得分:1)

接受参数数组的一个明显优势是,您可以自由添加(或删除!)新参数,而不会影响现有实现,因为方法签名不会改变。

选择传递参数Array的另一个可能原因是,您可以模仿named parameters,这可以使方法更灵活,并避免必须拥有接受大量参数的方法签名。

答案 2 :(得分:0)

事实上,这是多参数方法的专家。

正如人们在这里提到的,js对象(这里的数组不是很好的IMO)的优点是函数签名变得灵活。并不是说javascript像其他语言一样强制执行此操作,但是每次要更改参数时都不需要更改函数签名。

Facebook,使用你带来的例子,每10分钟改变他们的SDK和其他协议(我讨厌使用Facebook开发的东西,他们的文档令人震惊,他们有一种虐待狂的倾向,通过带出来从地板上滑下地毯没有向后兼容性的所有新版本。虽然这不是这个咆哮的地方)。所以对他们来说,这会有所帮助。

我认为在某些情况下有用的一个区别是:

通常,当函数执行某个操作时,会有一些参数定义函数应该执行其任务的。例如,compare(3,4)将对参数34执行相关算术。

另一组参数是定义函数行为的方式。例如compare(3,4,'strict')。在这里,我不是将'strict'与任何事物进行比较,而是该参数告诉函数我想要执行特定类型的比较。

在这个例子中,似乎不太可能会有太多变化,所以主题大多不相关,尽管在更大的更复杂的功能上,情况并非如此。我经常发现最“稳定”的参数是,函数的定义通常以此为基础。而行为参数更频繁地更改,而且通常不存在。

除了使方法签名更“稳定”之外,它还使代码更具可读性,因为在每个函数调用中,您通常可以看到函数的操作数将是什么,而不是单个对象,这对于理解和调试。