Почему в фигурных скобках этой функции есть скобки, и что это значит? - PullRequest
0 голосов
/ 28 сентября 2018

Я обнаружил следующий код в Посте, связанном с GraphQL . Почему в фигурных скобках есть квадратные скобки за пределами фигурных скобок и что это означает?

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

Ниже приведены известные мне выражения функций / объявления:

Стандартные именованные функции

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

ES6 Анонимные функции

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

Самостоятельно вызываемые функции

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

Self-вызванные анонимные функции ES6

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

Насколько я знаю, функция fields не подходит ни для одного из перечисленных выше.

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Если бы не было скобок, как бы это выглядело?

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

Ну, это очень похоже на синтаксис функционального блока.И на самом деле, это то, что интерпретаторы примут, а затем вызовут синтаксические ошибки, когда увидят странный синтаксис key: value, где ожидаются стандартные выражения.

Другими словами, круглые скобки означают, что функция возвращаетобъект, и что фигурные скобки не должны интерпретироваться как заключающие в себя блок кода.

0 голосов
/ 28 сентября 2018

Возвращаемый объект заключен в круглые скобки '()', поэтому фигурные скобки рассматриваются не как тело функции, а как объект.

0 голосов
/ 28 сентября 2018

Скобки предназначены для того, чтобы функция возвращала объект без необходимости заключать весь объект в фигурные скобки с 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 },
           }
  }
});

но этоне так приятно, как использование круглых скобок, которые заставят функцию возвращать объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...