簡體   English   中英

為什么在此函數中大括號之外有括號,這意味着什么?

[英]Why are there brackets outside of the curly brackets in this function and what does this mean?

我在GraphQL相關的文章中遇到了以下代碼。 為什么在fields參數的花括號之外有括號,這是什么意思?

var PersonType = new GraphQLObjectType({
  name: 'Person',
  fields: () => ({
    name: { type: GraphQLString },
    bestFriend: { type: PersonType },
  })
});

以下是我知道的函數表達式/聲明:

標准命名函數

function sayHello() {
    alert("hello!");
};

ES6匿名函數

() => {
    alert("hello!");
};

自調用功能

(function sayHello() {
    alert("hello!");
})();

自調用ES6匿名函數

(() => {
    alert("hello!");
})();

據我所知,fields函數不適合以上任何一個。

括號可以使函數返回對象,而不必用return大括號括起來。

例如,這不起作用

var PersonType = new GraphQLObjectType({
  name: 'Person',
  fields: () => {                  // interpreted as a block not an object
    name: { type: GraphQLString },
    bestFriend: { type: PersonType },
  }
});

因為當您要返回一個對象時, {}將被解釋為一個塊。

您可以這樣做:

var PersonType = new GraphQLObjectType({
  name: 'Person',
  fields: () => {
    return { name: { type: GraphQLString },
             bestFriend: { type: PersonType },
           }
  }
});

但這似乎不如僅使用括號使函數返回該對象好。

返回的對象包含在“()”括號中,因此花括號不被視為函數體,而是對象。

如果沒有括號,它將是什么樣?

fields: () => {
  name: { type: GraphQLString },
  bestFriend: { type: PersonType },
}

好吧,看起來很像功能塊語法。 實際上,這就是解釋器所假定的,然后當他們看到奇怪的key: value時拋出語法錯誤key: value期望標准表達式的key: value語法。

換句話說,括號在這里表示函數返回一個對象,並且花括號不應該解釋為包​​含代碼塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM