首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript。const addName = name => ({firstnmae : name})和addName2 = ( name ) => {{name:name}之间的区别是什么?

JavaScript。const addName = name => ({firstnmae : name})和addName2 = ( name ) => {{name:name}之间的区别是什么?
EN

Stack Overflow用户
提问于 2020-10-13 13:23:13
回答 4查看 149关注 0票数 0

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

职能1:

代码语言:javascript
复制
const function1 = name => ({username: name}) // this is returning a object, even tho there is no 
                                             // return

职能2:`

代码语言:javascript
复制
const function2 = (name) => { {username : name }} // this is returning nothing as expected
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-10-13 13:42:22

第二个函数很有趣。第二个函数不创建对象。它是一个带有块{}和的函数。您可以通过向对象文本添加另一个属性来验证它,它将引发一个错误:

代码语言:javascript
复制
const function2 = (name) => { { username: name, firstname: name } }

它被解释成这样,这是一个无效的标签:

代码语言:javascript
复制
const function2 = (name) => {
  {
    username: name,
    firstname: name
  }
}

第一个问题已经在许多这样的问题中得到了解释。它是一个箭头函数,它隐式地返回对象。

票数 3
EN

Stack Overflow用户

发布于 2020-10-13 13:28:14

一个线性箭头函数将返回结果值。

例如:

代码语言:javascript
复制
const add = (a, b) => a + b;

然而,多行箭头函数(或使用{ & }定义的函数)不会返回值:

代码语言:javascript
复制
const add = (a, b) => {
  a + b;
};

为了使上面的值返回一个值,您需要返回关键字:

代码语言:javascript
复制
const add = (a, b) => {
  return a + b;
};

混乱的部分

您的情况有点混乱,因为您处理的是一个对象文本:

代码语言:javascript
复制
{ username: name }

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

代码语言:javascript
复制
const person = { name: 'Joseph', age: 33 }

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2020-10-13 13:34:26

不同之处在于,一个将没有返回语句,而另一个则有一个返回语句的简短形式,可以在箭头函数中使用它来返回对象,而不需要使用return语句。

代码语言:javascript
复制
// invalid syntax
const foo = () => {returns: 'object'}

// valid syntax
const foo = () => ({returns: 'object'})


// long form would look like 
const foo = () => {
    return {returns: 'object'}
}

问题是,当编写foo = () => {returns: 'object'}时,当引擎看到{}花括号时,它如何知道您想返回一个对象而不是打开一个函数体?

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64336019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档