const actionsMap = {
[GET_USER]: (state, action) => ({ post: action.msg })
};
我有这个代码,我偶然发现了。我一直在使用{}格式的箭头函数,这个()包装是什么意思?
答案 0 :(得分:7)
使用箭头功能,您可以使用单个语句或块作为函数体。这两个是等价的:
() => foo
() => {
return foo;
}
在您的示例中,如果lambda定义为() => {post: action.msg}
,则对象({}
)将被解释为正文块而不是对象。运行时会尝试将其解析为:
function () {
post: action.msg
}
这是一个命名的标签和属性访问,在这里没有多大意义。通过包装在parens中,您提示解析器它是一个要计算的表达式,单个表达式主体上的胖箭头函数规则启动,使其等效于:
function () {
return {post: action.msg};
}
要想要执行两个相关的事情(偶尔在map / reduce算法中有用)时要解决单表达式规则,可以使用parens对一对表达式进行分组:
foo.reduce((p, c) => (c.counted = true, p += c.value));
在将counted
添加到c
并将c.value
的结果作为p
的新值返回之前,这将设置p += c.value
的{{1}}属性1}}。
括号在ECMAScript中包装表达式,可以使用逗号运算符对多个表达式进行分组。在评估组时,将返回最后一个表达式的结果。
例如:
p
将打印var i = 0, j = 0;
console.log((j += 10, i += 2), j);
,因为2 10
组中的j
会增加并稍后打印。
答案 1 :(得分:2)
这是ES6箭头功能。更多内容如下: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
ES6
(state, action) => ({ post: action.msg })
ES5
function(state, action) {
return { post: action.msg };
}
答案 2 :(得分:2)
返回对象文字
请记住,使用简洁的语法返回对象文字 params => {object:literal}将无法正常工作:
var func =()=> {foo:1}; //调用func()返回 未定义! var func =()=> {foo:function(){}}; // SyntaxError:函数语句需要名称
这是因为大括号({})内的代码被解析为序列 语句(即foo被视为标签,而不是对象中的键 文字)。
请记住将对象文字包装在括号中:
var func =()=> ({foo:1});
所以..如果你想返回一个对象文字,请将其包装在()
中