带有表达式的nodejs箭头函数
nodejs arrow function with expression
根据 documentation,您可以 return 来自箭头函数的表达式:
(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 ]
第二个例子不应该 return 3 个空对象吗?还是我遗漏了什么?
根据 the docs,粗箭头函数的主体可以写成单个表达式或包裹在 {}
中的一系列语句(就像您编写普通旧函数的主体一样) .
关键是,如果解析器在 =>
之后遇到 {
,它会使用第二个选项。现在,无论您使用空对象文字还是完整对象文字(如本答案的第一次编辑中的 { a: 2 }
)都无关紧要 - 它从未被视为对象文字,仅被视为函数的主体。
如果函数没有 return
语句会怎样?对 - 这个函数 returns undefined
。这就是为什么你得到其中三个作为 map
的结果(=> {}
和 => { a: 2 }
)。
要获取三个空对象,只需将 {}
包装到 ()
中,如下所示:
[1,2,3].map(i => ({}));
... 因为它强制解析器使用 expression
路径。
根据 documentation,您可以 return 来自箭头函数的表达式:
(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 ]
第二个例子不应该 return 3 个空对象吗?还是我遗漏了什么?
根据 the docs,粗箭头函数的主体可以写成单个表达式或包裹在 {}
中的一系列语句(就像您编写普通旧函数的主体一样) .
关键是,如果解析器在 =>
之后遇到 {
,它会使用第二个选项。现在,无论您使用空对象文字还是完整对象文字(如本答案的第一次编辑中的 { a: 2 }
)都无关紧要 - 它从未被视为对象文字,仅被视为函数的主体。
如果函数没有 return
语句会怎样?对 - 这个函数 returns undefined
。这就是为什么你得到其中三个作为 map
的结果(=> {}
和 => { a: 2 }
)。
要获取三个空对象,只需将 {}
包装到 ()
中,如下所示:
[1,2,3].map(i => ({}));
... 因为它强制解析器使用 expression
路径。