1

我的一个朋友刚刚问我以下两种表达方式中哪一种是更好的选择。虽然我理解这个问题,因此更好的定义可能是一个意见问题,因此是题外话;我很想知道是否有充分的理由支持一个。

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

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

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

4

1 回答 1

0

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

不,无论哪种方式,您都会返回一个值。count更准确地说,从您的代码示例中,您正在为要返回对任一方式的引用的对象的属性分配一个值。

您的代码示例的唯一区别是何时reduce调用。在第一个中,它在您要返回的对象的构造开始之前被调用。第二个,它在那个构造过程中被调用。但是,该函数随后返回的内容没有区别。

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

由于上面的第一个答案是“不”,因此唯一的原因将我们带入,或者至少非常接近,意见的土地。

我能想出的最接近的客观衡量标准是您指出的衡量标准之一:调试。使用第一个,您可以count在构造和返回对象之前轻松查看。有了第二个,那就更难了。


有关此对象构造的更多详细信息,以防意外:JavaScript 定义了对象初始化程序中的属性初始化程序的运行顺序:不出所料,它们以源代码顺序运行。例如,如果我们有以下代码:

var num = 0;
function foo() {
    return ++num;
}
var obj = {
    a: foo(),
    b: foo(),
    c: foo()
};

...我们确定的值为obj.a1、2obj.bobj.c3。这是由规范定义的。

于 2015-11-25T17:35:03.290 回答