javascript - js 传参方式哪个更好?应该如何选择?
PHP中文网
PHP中文网 2017-04-11 10:09:19
[JavaScript讨论组]

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

/**
 * [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);
}
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
黄舟

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

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

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

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

ringa_lee

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

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

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

PHP中文网

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

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

黄舟

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

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

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

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

React.Component.setState(nextState, callback)

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

巴扎黑

第二种好

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

  2. 参数越多优势越明显

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号