传递参数的推荐方法是什么?

时间:2017-11-08 17:29:07

标签: javascript function parameter-passing

我展示了两种模式:

  • 模式A:参数先前保存在变量中。

  • 模式B:参数直接传递。

这里我展示了2个案例:

案例1:没有连接的参数

//Mode A:
const msg = this.test.fullTitle();
return helper.error(msg, err, done);

//Mode B:
return helper.error(this.test.fullTitle(), err, done);

案例2:连接参数

//Mode A:
const msg = this.test.fullTitle() + ' welcome';
return helper.error(msg, err, done);

//Mode B:
return helper.error(this.test.fullTitle() + ' welcome', err, done);

问题:

推荐哪种模式,可读性,高效还是仅仅是个人风格?

4 个答案:

答案 0 :(得分:3)

对于案例2模式A:

const fullTitle = this.test.fullTitle();
const msg =  `${fullTitle} welcome`;
return helper.error(msg, err, done);

我想强调的要点是:

  1. 使用es6功能,例如" $ {variableName}"而不是使用" +"。
  2. 联系字符串
  3. 而不是传递一长串参数,而不是传递单个对象(在您创建的函数上)。
    • 您创建的任何函数都应接受单个对象。通过这样做,你不必关心你必须在函数中传递的参数的顺序。
  4. 如果您的帮助函数接受单个对象作为参数,那么它看起来像:

    const fullTitle= this.test.fullTitle();
    const msg =  `${fullTitle} welcome`;
    const err = null;
    const done = () => {};
    return helper.error({msg, err, done});
    

    您的帮助函数的定义如下所示:

    const error = (params) => {
    const {msg , err , done  } = params;
    //do something here
    } 
    

答案 1 :(得分:1)

代码清晰度不应该是你自己难以理解的。选择一种风格,看看它。它看起来清晰可读吗?这种方法有什么问题吗?写入内联值会导致行向右延伸太远吗?如果是这样,要么使用变量,要么将参数放在自己的行上(或者每个行都在自己的行上)。

所以基本上答案是使用常识并做出决定。

答案 2 :(得分:0)

在我看来

我将Parameter without concatenationmode A一起使用,因为:

  • 我们可以使用单元测试来测试它
  • 易于书写和理解
  • 在复杂情况下,您可以轻松地将代码转移到Typescript或其他语言风格

答案 3 :(得分:0)

从效率或表现来看,没有区别。在这两种情况下,将首先评估函数fullTitle(),并将返回的字符串传递给error()函数。连接是一种可能的开销(字符串在JavaScript中是不可变的)。但在这些情况下可能微不足道。

现在,如果您以某种方式在库中实现延迟评估或按名称传递的形式,传递样式将产生巨大的差异。

在我看来,功能可读性部分与命名参数有关。同样,JavaScript不支持命名参数。 error(message="msg")是不可能的。如果绝对需要这种可读性,可以采用一种将对象文字传递给函数的方式。

error({message : "msg"});
相关问题