对于箭头函数,您可以使用单个语句或块作为函数体。这两个是等价的:
() => foo
() => {
return foo;
}
在您的示例中,如果 lambda 定义为() => {post: action.msg}
物体 ({}
) 将被解释为主体块而不是对象。运行时会尝试将其解析为等效于:
function () {
post: action.msg
}
这是一个命名标签和属性访问,在这里没有多大意义。通过用括号括起来,您向解析器暗示它是一个要计算的表达式,并且单表达式主体上的粗箭头函数规则启动,使其等效于:
function () {
return {post: action.msg};
}
当您想要做两个相关的事情时(在映射/归约算法中偶尔有用),要解决单表达式规则,您可以使用括号对一对表达式进行分组:
foo.reduce((p, c) => (c.counted = true, p += c.value));
这将设置counted
的财产c
, 在添加之前c.value
to p
并返回结果p += c.value
作为新值p
.
ECMAScript 中的括号将表达式括起来,并且可以与逗号运算符一起使用来对多个表达式进行分组。计算组时返回最后一个表达式的结果。
例如:
var i = 0, j = 0;
console.log((j += 10, i += 2), j);
将打印2 10
, since j
是递增的()
组并稍后打印。