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 ]

第二个示例不应该返回 3 个空对象吗?还是我错过了什么?

4

1 回答 1

5

根据文档,胖箭头函数的主体可以写成单个表达式或包装成的一系列语句{}(就像您编写普通旧函数的主体一样)。

关键是,如果解析器在{之后遇到=>,它会使用第二个选项。现在,无论您使用空对象文字还是完整对象文字(就像{ a: 2 }在这个答案的第一次编辑中一样)都没有关系 - 它永远不会被视为对象文字,只是作为函数的主体。

如果函数没有return声明会发生什么?对——这个函数返回undefined。这就是为什么你会得到其中三个作为map(for=> {}和 for => { a: 2 })的结果。

要获取三个空对象,只需将{}其换成(),如下所示:

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

...因为它强制解析器使用expression路径。

于 2015-12-25T12:23:45.567 回答