javascript中的Arrow函数

javascript中的Arrow函数,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在阅读本教程: 但我对Javascript中的箭头函数感到困惑。 我理解语法: var myFunction = (para1, para2) => {statements} var myFunction2 = ({para1, para2}) => (stattements) 我可以使用:myFunction(para1,para2) 但我不懂语法: var myFunction = (para1, para2) => {statements} var myFun

我正在阅读本教程: 但我对Javascript中的箭头函数感到困惑。
我理解语法:

var myFunction = (para1, para2) => {statements}
var myFunction2 = ({para1, para2}) => (stattements)
我可以使用:
myFunction(para1,para2)

但我不懂语法:

var myFunction = (para1, para2) => {statements}
var myFunction2 = ({para1, para2}) => (stattements)
({para1,para2})
(语句)
是什么意思?

大家能帮帮我吗?对不起,我的英语不好。

你说的是

对象分解允许您同时从一个对象分配多个变量。例如:

let object = { foo: 3, bar: 7 };

// object destructuring
let { foo, bar } = object;

console.log(foo, bar); // prints "3 7"
在函数参数中使用此参数时也会发生同样的情况:

let myFunction = function({ foo, bar }) { // can use arrow functions or regular functions
  console.log(foo, bar);
};

let object = { foo: 3, bar: 7 };
myFunction(object); // prints "3 7"

另外,使用方括号和圆括号(或不使用)的区别在于,只有使用方括号才能有多个语句,否则只能有一个表达式(将自动返回):


您可以阅读更多信息。

我建议您阅读以下内容:

你可以这样写:

myFunction = (param1, param2)=>{
     //body
}
同样:

function myFunction(param1, param2){
    //body
}
在括号之间传递参数(如果oly有一个参数,则括号是可选的),并在语句中写入函数的逻辑块。阅读文档对你来说非常重要。希望能有所帮助。

此语法与(请参阅)相关,并且在React中很常见,因为组件可以声明为单个对象props的函数

而不是写:

var Hello = (props) => {
    return <div>Hello {props.name} from {props.city} with {props.item}</div>;
}
正如您所看到的,传递属性的顺序并不重要。与默认参数列表语法相反。这种行为在React应用程序中可能是有利的,因为组件倾向于接受多个命名属性

语法问题 如果函数参数中的对象分解周围没有大括号,则会出现语法错误,因为它被解析为对象文本

var doesntWork = {para1, para2} => console.log(para1, para2)
当您希望在arrow函数中返回对象时,也会出现同样的问题,这可能会导致不期望的行为。例如,此代码将返回并打印
undefined

var add = ({a, b}) => {sum: a + b}
var result = add({b: 3, a: 5})
console.log(result)
括号被解析为代码块,而不是表达式。要修复代码,应该用大括号括起来:
varadd=({a,b})=>({sum:a+b})


对象和数组解构是一个强大的工具,它使React中的无状态功能组件成为可能和可行的。代码变得更简单,可读性更强。

感谢您的回复@Frxstrem。但我不理解{statements}和
=>
右侧的@user3089480(statements)之间的区别,
(statements)
不一定有效。这里的括号是(实际上不是箭头函数语法的一部分),与数学表达式中使用的相同,但它们只能包含一个表达式而不能包含一组语句。@user3089480
{statements}
的大括号定义了一个表达式。它们可以与箭头函数一起使用,就像它们与控制结构一起使用一样(
if..else
for
,等等),让函数包含多个语句。我认为这并不能回答这个问题,这个问题特别是关于对象分解和所谓的“consise body”(没有花括号)在箭头函数中,不是关于一般的箭头函数。是的,你是对的,我误解了这个问题。抱歉。
函数myFunction=(param1,param2)=>{…}
不是有效的JavaScript。基本上是
var add = ({a, b}) => {sum: a + b}
var result = add({b: 3, a: 5})
console.log(result)