我展示了两种模式:
模式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);
问题:
推荐哪种模式,可读性,高效还是仅仅是个人风格?
答案 0 :(得分:3)
对于案例2模式A:
const fullTitle = this.test.fullTitle();
const msg = `${fullTitle} welcome`;
return helper.error(msg, err, done);
我想强调的要点是:
如果您的帮助函数接受单个对象作为参数,那么它看起来像:
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 concatenation
与mode A
一起使用,因为:
Typescript
或其他语言风格答案 3 :(得分:0)
从效率或表现来看,没有区别。在这两种情况下,将首先评估函数fullTitle()
,并将返回的字符串传递给error()
函数。连接是一种可能的开销(字符串在JavaScript中是不可变的)。但在这些情况下可能微不足道。
现在,如果您以某种方式在库中实现延迟评估或按名称传递的形式,传递样式将产生巨大的差异。
在我看来,功能可读性部分与命名参数有关。同样,JavaScript不支持命名参数。 error(message="msg")
是不可能的。如果绝对需要这种可读性,可以采用一种将对象文字传递给函数的方式。
error({message : "msg"});