JavaScript。const addName=name=>({firstnmae:name})和addName2=(name)=>{{firstname:name}之间有什么区别

JavaScript。const addName=name=>({firstnmae:name})和addName2=(name)=>{{firstname:name}之间有什么区别,javascript,node.js,Javascript,Node.js,我目前正在学习JavaScript,很难理解这两个函数之间的区别。我以为他们是平等的,但他们的行为完全不同 职能1: const function1 = name => ({username: name}) // this is returning a object, even tho there is no // return 职能2:` const function2 = (name) =&g

我目前正在学习JavaScript,很难理解这两个函数之间的区别。我以为他们是平等的,但他们的行为完全不同

职能1:

const function1 = name => ({username: name}) // this is returning a object, even tho there is no 
                                             // return
职能2:`

const function2 = (name) => { {username : name }} // this is returning nothing as expected

单行箭头函数将返回结果值

例如:

const add = (a, b) => a + b;
而多行箭头函数或使用{&}定义的函数不会返回值:

const add = (a, b) => {
  a + b;
};
为了让上述内容返回值,您需要return关键字:

const add = (a, b) => {
  return a + b;
};
令人困惑的部分

您的案例有点混乱,因为您处理的是对象文字:

{ username: name }
此语法表示一个对象。javascript中的对象类似于其他语言中的关联数组——也就是说,它们类似于以字符串作为索引的数组。您将看到的一个常见示例如下:

const person = { name: 'Joseph', age: 33 }

// output the name:
console.log(person.name);

// output the age:
console.log(person.age);

因此,在第一个示例中,通过将对象文本包装在parens中,可以将其作为一个单行箭头函数进行维护,然后返回对象文本。第二个示例实际上是一个多行定义,它将再次。。。没有返回值。

不同的是,一个没有返回语句,而另一个有一个简短的返回语句,可以在arrow函数中使用它返回对象,而不返回exiplicity语句

//无效语法 const foo==>{returns:'object'} //有效语法 const foo==>{returns:'object'} //长表格看起来像 常量foo==>{ return{returns:'object'} } 问题是,当您编写foo==>{returns:'object'}时,当引擎看到{}花括号时,它如何知道您想要返回一个对象而不是打开一个函数体

要让引擎知道它应该是一个应该返回的对象,您可以将它包装在父对象中。

这两个函数都是

函数1是一个隐式返回箭头函数,因此即使未使用显式返回,也将返回对象{username:name}

职能1 const function1=name=>{username:name} 当使用隐式返回箭头函数和要返回的对象时,应该将其包装在中。如果我们不使用{…}或…,那么它将是无效的语法

//无效语法->将引发错误。因此,应该使用`` const function1=name=>{username:name} 但是在函数2中,函数定义被包装在{…}中。由于函数中没有return语句,因此不会返回任何内容

职能2 const function2=name=>{{username:name}
第二个函数很有趣。第二个函数不创建对象。它是一个具有块{}和。您可以通过向对象文本添加另一个属性来验证它,它将抛出一个错误:


const function2=name=>{{{username:name,firstname:name}}我想你发现了区别。。。。仔细阅读文档,您忘了提到可以在父对象中包装返回对象,使其在没有显式返回语句的情况下工作,这就是const foo==>{retuns:'object'}@TheFool将返回对象包装在括号中与arrow函数无关。它只用于通知JavaScript表达式正在跟随,从而将{解释为对象文字而不是块{的对象将被解读为块的开口。这个解释也可以在中找到。我从来没有说过它与箭头函数有关。我的意思是,本质上,这就是被问到的。而你根本没有提到它。在第二个函数中,它没有被解释为对象。是的,你是正确的@adiga。谢谢poin我要出去了。