1

私の友人は、次の 2 つの表現のどちらがより適切な選択であるかを私に尋ねました。私は質問を理解していますが、したがってより良いの定義は、潜在的に意見の問題であり、したがってトピックから外れています。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呼び出されるかです。最初のものでは、返すオブジェクトの構築が始まる前に呼び出されます。2 つ目は、その構築中に呼び出されます。ただし、関数が次に返すものに違いはありません。

式を返すのではなく、値を返すことを好む理由はありますか?

上記の最初の答えは「いいえ」であるため、唯一の理由は、私たちを意見の土地、または少なくとも非常に近いところに連れて行くことです.

私が思いつくことができる最も近い客観的な尺度は、あなたが指摘したものの1つであるデバッグです。count最初のものを使用すると、オブジェクトを構築して返す前に簡単に確認できます。2番目の場合、それはより困難です。


意外だった場合に備えて、このオブジェクトの構築に関する詳細: JavaScript は、オブジェクト初期化子のプロパティ初期化子が実行される順序を定義します: 当然のことながら、それらはソース コードの順序で実行されます。たとえば、次のコードがあるとします。

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

obj.a... の値が 1、2、3 でobj.bあることは確かobj.cです。これは仕様で定義されています。

于 2015-11-25T17:35:03.290 に答える