js 传参方式哪个更好?应该如何选择?

以下两种传参的方式哪个更好?

/**
 * [sayHello description]
 * @Author   Wangduanduan
 * @DateTime 2016-12-08T14:15:01+0800
 * @param    {[String]}                 name [agent name]
 * @param    {[String]}                 age  [agent age]
 * @param    {[String]}                 sex  [agent sex]
 * @return   {[]}                      [description]
 */
function sayHello(name, age, sex){
    console.log(name);
    console.log(age);
    console.log(sex);
}


/**
 * [sayHello2 description]
 * @Author   Wangduanduan
 * @DateTime 2016-12-08T14:17:29+0800
 * @param    {[Object]}                 agent [agent.name, agent.age, agent.sex]
 * @return   {[]}                             [description]
 */
function sayHello2(agent){
    console.log(agent.name);
    console.log(agent.age);
    console.log(agent.sex);
}
阅读 3k
5 个回答

我更愿意从需求的复杂度和语义化的角度去看

前一种比较简单,传入的参数很直观明了,至于扩展性的话,可以给设置参数默认值,也问题不大

但是如果传入的参数,其实是一个整体,比如传入一个人的数据,包括身高、体重、三围等,那么就是一个整体,可以包装成对象再传递

不过要注意,传入的是基本类型还是引用类型是有差别的

看需求。都按第二种写虽然扩展性好,可很多时候也是白白增加了工作量。

比如什么修改用户数据啊,表单数据这类的,字段多而且后期很容易增删,这时候就用对象做参数。

不会经常变化的需求,第一种就行。

前者简单实用,后者参数扩展性好,随时能添加参数而不需要增加或减少参数个数啥的。

但是,后者就没那么直观,如果没有注释的情况下,后者参数可读性就比较差一些,如果代码多,可能找半天都不知道到底可以传哪些内容~

这个其实没有所谓一刀切的标准,主要按照应用场景区分。

如果参数个数少,相关性不大,选第一种

ReactDOM.render(
  element,
  container,
  [callback]
)

如果参数个数多,各参数之间具有明显的相关性,可以整合为一个有意义的整体,选第二种

React.Component.setState(nextState, callback)

nextState在这就是一系列state合集的Object

第二种好

  1. 调用时不用记参数顺序

  2. 参数越多优势越明显

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题