箭头在()之后用什么方式起作用?

Vin*_*ide 5 javascript ecmascript-6

const actionsMap = {
  [GET_USER]: (state, action) => ({ post: action.msg })
};
Run Code Online (Sandbox Code Playgroud)

我有这个代码,我偶然发现了.我一直在使用{}格式的箭头函数,这个()包装是什么意思?

ssu*_*ube 7

使用箭头函数,您可以使用单个语句或块作为函数体.这两个是等价的:

() => foo
() => {
  return foo;
}
Run Code Online (Sandbox Code Playgroud)

在您的示例中,如果将lambda定义为() => {post: action.msg}object({})将被解释为body块而不是对象.运行时会尝试将其解析为等效于:

function () {
  post: action.msg
}
Run Code Online (Sandbox Code Playgroud)

这是一个命名标签和属性访问,这里没有多大意义.通过包装在parens中,您提示解析器它是一个要计算的表达式,单个表达式主体上的胖箭头函数规则启动,使其等效于:

function () {
  return {post: action.msg};
}
Run Code Online (Sandbox Code Playgroud)

要在要执行两个相关操作(偶尔在map/reduce算法中有用)时解决单表达式规则,可以使用parens对一对表达式进行分组:

foo.reduce((p, c) => (c.counted = true, p += c.value));
Run Code Online (Sandbox Code Playgroud)

这将设置counted的属性c,增加前c.valuep和返回的结果p += c.value为一体的新的价值p.

括号在ECMAScript中包装表达式,可以使用逗号运算符对多个表达式进行分组.评估组时返回最后一个表达式的结果.

例如:

var i = 0, j = 0;
console.log((j += 10, i += 2), j);
Run Code Online (Sandbox Code Playgroud)

将打印2 10,因为j()组中递增并稍后打印.

  • @squint修正了.我总是忘记标签. (2认同)