各自的优点和缺点是什么?
例如:my_func(a,b,c,d,e)vs my_func(params)。
一般来说,我喜欢前者,因为intellisense可以为使用IDE的人检测它。而使用第二种方法需要开发人员查找文档。但是,我注意到Facebook的JS SDK大量使用后者。
答案 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)
将对参数3
和4
执行相关算术。
另一组参数是定义函数行为的方式。例如compare(3,4,'strict')
。在这里,我不是将'strict'
与任何事物进行比较,而是该参数告诉函数我想要执行特定类型的比较。
在这个例子中,似乎不太可能会有太多变化,所以主题大多不相关,尽管在更大的更复杂的功能上,情况并非如此。我经常发现最“稳定”的参数是值,函数的定义通常以此为基础。而行为参数更频繁地更改,而且通常不存在。
除了使方法签名更“稳定”之外,它还使代码更具可读性,因为在每个函数调用中,您通常可以看到函数的操作数将是什么,而不是单个对象,这对于理解和调试。