返回值和在JavaScript中返回表达式之间有区别吗?

时间:2015-11-25 17:30:32

标签: javascript return code-structure

我的一位朋友刚问我以下哪两种表达方式是更好的选择。虽然我理解这个问题,因此更好的定义,可能是一个意见问题,因而是一个偏离主题的问题;我很想知道是否有一个好的推理支持一个。

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)
};

另一位同事和我都同意第一个会更好,因为它更清晰,可能更容易调试,更容易理解,但除此之外我们无法证明我们的选择。

有没有理由支持返回值而不是返回表达式?

1 个答案:

答案 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.这是由规范定义的。