后面带 () 的箭头函数是啥意思? [复制]

Posted

技术标签:

【中文标题】后面带 () 的箭头函数是啥意思? [复制]【英文标题】:What does the arrow function with a () after means? [duplicate]后面带 () 的箭头函数是什么意思? [复制] 【发布时间】:2015-09-29 11:28:46 【问题描述】:
const actionsMap = 
  [GET_USER]: (state, action) => ( post: action.msg )
;

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

【问题讨论】:

你确定这是 javascript 吗?它不会在我的控制台中解析。我认为是 Coffeescript 或其他类似的衍生语言。 看起来像个lambda表达式,JS不支持。 MDN: Arrow Functions: 这是一种新技术,是 ECMAScript 2015 (ES6) 标准的一部分。该技术的规范已经定稿,但请查看兼容性表,了解各种浏览器的使用情况和实现情况。 箭头函数表达式(也称为胖箭头函数 ) 与函数表达式相比具有更短的语法并在词法上绑定 this 值。箭头函数始终是匿名的。 所以你已经知道“箭头函数”的术语和概念...不知道还有什么要告诉你的。 另见ECMAScript6 arrow function that returns an object 【参考方案1】:

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

() => foo
() => 
  return foo;

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

function () 
  post: action.msg

这是一个命名标签和属性访问,在这里没有多大意义。通过包裹在括号中,您可以向解析器提示它是一个要计算的表达式,并且单表达式主体上的胖箭头函数规则开始生效,使其等效于:

function () 
  return post: action.msg;

当您想要做两个相关的事情(有时在 map/reduce 算法中有用)时,要绕过单一表达式规则,您可以使用括号对一对表达式进行分组:

foo.reduce((p, c) => (c.counted = true, p += c.value));

这将设置ccounted 属性,然后将c.value 添加到p 并将p += c.value 的结果作为p 的新值返回。

括号包裹了 ECMAScript 中的表达式,并且可以与逗号运算符一起使用,对多个表达式进行分组。评估组时返回最后一个表达式的结果。

例如:

var i = 0, j = 0;
console.log((j += 10, i += 2), j);

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

【讨论】:

“……这显然是无效的。”在那种特殊情况下实际上并不是无效的,但肯定不是预期的。 @squint 已修复。我总是忘记标签。 谢谢,这个响应比其他响应更详细,所以我将其投票为正确的,因为它显然意味着它是一个对象响应。其他答案更简洁,对其他人来说更好,所以请继续检查【参考方案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 ;

【讨论】:

【参考方案3】:

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Returning_object_literals

返回对象字面量

请记住,使用简洁的语法返回对象字面量 params => object:literal 不会按预期工作:

var func = () => foo: 1 ; // 调用 func() 返回 不明确的! var func = () => foo: function() ; // SyntaxError: 函数语句需要名称

这是因为大括号 () 内的代码被解析为 语句(即 foo 被视为标签,而不是对象中的键 字面意思)。

记得将对象字面量用括号括起来:

var func = () => ( foo: 1 );

so .. 如果你想返回一个对象字面量,把它包装在 ()

【讨论】:

以上是关于后面带 () 的箭头函数是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python 方法签名中的 ->(破折号大于箭头符号)是啥意思? [复制]

python 定义函数时的字典,向右有个小箭头是啥意思?

css中那种两边带箭头的鼠标形状和成45度的两边带箭头的鼠标形状分别是啥代码?

带括号或方括号的箭头函数之间的区别[重复]

带 2 个箭头和 3 个箭头的按位移位有啥区别? [复制]

Chrome DevTools:这个箭头(<-)是啥意思?