后面带 () 的箭头函数是啥意思? [复制]
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));
这将设置c
的counted
属性,然后将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 方法签名中的 ->(破折号大于箭头符号)是啥意思? [复制]