3

ドキュメントによると、アロー関数から式を返すことができます。

(param1, param2, …, paramN) => expression
     // equivalent to:  => { return expression; }

しかし、これは期待どおりに機能しないようです(nodejs 4.2.3)

> [1,2,3].map(i => i);
[ 1, 2, 3 ]
> [1,2,3].map(i => {});
[ undefined, undefined, undefined ]

2 番目の例は 3 つの空のオブジェクトを返すべきではありませんか? または、何か不足していますか?

4

1 に答える 1

5

docsによると、ファットアロー関数の本体は、単一の式またはラップされた一連のステートメントとして記述{}できます (単純な古い関数の本体を記述するのと同じように)。

ポイントは、パーサーが{の後に遭遇した場合=>、2 番目のオプションを使用することです。さて、空のオブジェクトリテラルまたは完全なオブジェクトリテラルを使用するかどうかは関係ありません({ a: 2 }この回答の最初の編集のように)-オブジェクトリテラルとして扱われることはなく、関数の本体としてのみ扱われます。

return関数にステートメントがない場合はどうなりますか? 右 - この関数は を返しますundefined。そのため、( forと forのmap両方)の結果としてそれらのうちの 3 つが得られます。=> {}=> { a: 2 }

代わりに 3 つの空のオブジェクトを取得するには、次のように にラップ{}します。()

[1,2,3].map(i => ({}));

expression...パーサーにパスを強制するためです。

于 2015-12-25T12:23:45.567 に答える