javascript中的Arrow函数
我正在阅读本教程: 但我对Javascript中的箭头函数感到困惑。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
我理解语法:
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)