我的一位朋友刚问我以下哪两种表达方式是更好的选择。虽然我理解这个问题,因此更好的定义,可能是一个意见问题,因而是一个偏离主题的问题;我很想知道是否有一个好的推理支持一个。
var count = _.reduce(randomData, function(prefix, businessData){
return prefix + businessData.length;
}, 0);
return {
name: randomName,
pos: position[randomName],
count: count
};
或
return {
name: randomName,
pos: position[randomName],
count:
_.reduce(randomData, function(prefix, businessData){
return prefix + businessData.length;
}, 0)
};
另一位同事和我都同意第一个会更好,因为它更清晰,可能更容易调试,更容易理解,但除此之外我们无法证明我们的选择。
有没有理由支持返回值而不是返回表达式?
答案 0 :(得分:1)
在JavaScript中返回值和返回表达式之间有区别吗?
不,你要么以任何方式返回一个值。更准确地说,从您的代码示例中,您为要返回对任一方式的引用的对象的count
属性赋值。
代码示例的唯一区别是调用reduce
时。在第一个中,在构建您要返回的对象之前调用它。在第二个中,它在构造期间被调用。然而,函数继续返回的内容没有区别。
有没有理由支持返回值而不是返回表达式?
由于上面的第一个答案是“不”,唯一的理由将我们带入或至少非常接近意见之地。
我能提出的最接近的目标衡量指标是你指出的一个:调试。使用第一个,您可以在构造和返回对象之前轻松查看count
。第二,这更难。
关于这个对象构造的更多细节,如果是一个惊喜:JavaScript定义了对象初始化程序中的属性初始化程序的运行顺序:不出所料,它们以源代码顺序运行。例如,如果我们有这个代码:
var num = 0;
function foo() {
return ++num;
}
var obj = {
a: foo(),
b: foo(),
c: foo()
};
...我们肯定知道obj.a
的值为1,obj.b
为2,obj.c
为3.这是由规范定义的。