Javascript 箭头后面有一个()表示什么?

Javascript 箭头后面有一个()表示什么?,javascript,ecmascript-6,Javascript,Ecmascript 6,我偶然发现了这个代码。我一直在使用{}格式的arrow函数,这个()包装器是什么意思?这是ES6 arrow函数。更多内容请阅读: ES6 (state,action)=>({post:action.msg}) ES5 这是ES6的箭头函数。更多内容请阅读: ES6 (state,action)=>({post:action.msg}) ES5 对于箭头函数,可以使用单个语句或块作为函数体。这两个是等效的: function(state, action) { return { post

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

这是ES6 arrow函数。更多内容请阅读:

ES6

(state,action)=>({post:action.msg})

ES5


这是ES6的箭头函数。更多内容请阅读:

ES6

(state,action)=>({post:action.msg})

ES5


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

function(state, action) {
   return { post: action.msg };
}
在您的示例中,如果lambda被定义为
()=>{post:action.msg}
,那么对象(
{}
)将被解释为一个实体块,而不是一个对象。运行时将尝试将其解析为等效项:

() => foo
() => {
  return foo;
}
function () {
  post: action.msg
}
这是一个命名标签和属性访问,在这里没有多大意义。通过使用parens进行包装,可以向解析器提示它是一个要求值的表达式,并且单个表达式体上的fat arrow函数规则生效,使其等效于:

() => foo
() => {
  return foo;
}
function () {
  post: action.msg
}
要在需要执行两个相关操作(在map/reduce算法中偶尔有用)时绕过单个表达式规则,可以使用parens对一对表达式进行分组:

function () {
  return {post: action.msg};
}
这将设置
c
counted
属性,然后将
c.value
添加到
p
,并将
p+=c.value
的结果返回为
p
的新值

括号括起ECMAScript中的表达式,并可与逗号运算符一起用于对多个表达式进行分组。计算组时,将返回最后一个表达式的结果

例如:

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

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

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

function(state, action) {
   return { post: action.msg };
}
在您的示例中,如果lambda被定义为
()=>{post:action.msg}
,那么对象(
{}
)将被解释为一个实体块,而不是一个对象。运行时将尝试将其解析为等效项:

() => foo
() => {
  return foo;
}
function () {
  post: action.msg
}
这是一个命名标签和属性访问,在这里没有多大意义。通过使用parens进行包装,可以向解析器提示它是一个要求值的表达式,并且单个表达式体上的fat arrow函数规则生效,使其等效于:

() => foo
() => {
  return foo;
}
function () {
  post: action.msg
}
要在需要执行两个相关操作(在map/reduce算法中偶尔有用)时绕过单个表达式规则,可以使用parens对一对表达式进行分组:

function () {
  return {post: action.msg};
}
这将设置
c
counted
属性,然后将
c.value
添加到
p
,并将
p+=c.value
的结果返回为
p
的新值

括号括起ECMAScript中的表达式,并可与逗号运算符一起用于对多个表达式进行分组。计算组时,将返回最后一个表达式的结果

例如:

foo.reduce((p, c) => (c.counted = true, p += c.value));
将打印
2 10
,因为
j
()
组中递增,以后再打印。

来自

返回对象文本

请记住,使用简明语法返回对象文本 params=>{object:literal}将无法按预期工作:

var func=()=>{foo:1};//调用func()返回 未定义!var func=()=>{foo:function(){}// SyntaxError:函数语句需要名称

这是因为大括号({})中的代码被解析为 语句(即foo被视为标签,而不是对象中的键 文字)

请记住将对象文字括在括号中:

var func=()=>({foo:1})

所以。。如果要返回对象文字,请将其包装在()中

返回对象文本

请记住,使用简明语法返回对象文本 params=>{object:literal}将无法按预期工作:

var func=()=>{foo:1};//调用func()返回 未定义!var func=()=>{foo:function(){}// SyntaxError:函数语句需要名称

这是因为大括号({})中的代码被解析为 语句(即foo被视为标签,而不是对象中的键 文字)

请记住将对象文字括在括号中:

var func=()=>({foo:1})


所以。。如果要返回对象文字,请将其包装为()

是否确定这是Javascript?它不会在我的控制台中解析。我认为这是Coffeescript或其他类似的衍生语言。这看起来像一个lambda表达式,JS不支持。这是一项新技术,是ECMAScript 2015(ES6)标准的一部分。这项技术的规范已经定稿,但请查看兼容性表,了解在各种浏览器中的使用情况和实现状态。arrow函数表达式(也称为fat arrow函数)与函数表达式相比具有更短的语法,并在词汇上绑定此值。箭头函数总是匿名的。所以你已经知道了“箭头函数”的术语和概念。。。不确定还有什么要告诉你的。你确定这是Javascript吗?它不会在我的控制台中解析。我认为这是Coffeescript或其他类似的衍生语言。这看起来像一个lambda表达式,JS不支持。这是一项新技术,是ECMAScript 2015(ES6)标准的一部分。这项技术的规范已经定稿,但请查看兼容性表,了解在各种浏览器中的使用情况和实现状态。arrow函数表达式(也称为fat arrow函数)与函数表达式相比具有更短的语法,并在词汇上绑定此值。箭头函数总是匿名的。所以你已经知道了