Javascript 为什么这个函数中的花括号外有括号?这是什么意思?

Javascript 为什么这个函数中的花括号外有括号?这是什么意思?,javascript,function,Javascript,Function,我在一篇文章中遇到了以下代码。为什么字段参数中的花括号外有括号?这是什么意思 以下是我知道的函数表达式/声明: 标准命名函数 ES6匿名函数 自调用函数 自调用ES6匿名函数 据我所知,fields函数不符合上述任何条件。括号用于使函数返回对象,而不必将整个对象用大括号括起来 例如,这不起作用: 因为当您想要返回一个对象时,{}将被解释为一个块 您可以这样做: var PersonType = new GraphQLObjectType({ name: 'Person', fields:

我在一篇文章中遇到了以下代码。为什么字段参数中的花括号外有括号?这是什么意思

以下是我知道的函数表达式/声明:

标准命名函数

ES6匿名函数

自调用函数

自调用ES6匿名函数


据我所知,fields函数不符合上述任何条件。

括号用于使函数返回对象,而不必将整个对象用大括号括起来

例如,这不起作用:

因为当您想要返回一个对象时,{}将被解释为一个块

您可以这样做:

var PersonType = new GraphQLObjectType({
  name: 'Person',
  fields: () => {
    return { 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语法时抛出语法错误,而标准表达式是预期的


换句话说,括号表示函数返回一个对象,大括号不应被解释为包含一个代码块。

如果没有括号,它会是什么样子

fields: () => {
  name: { type: GraphQLString },
  bestFriend: { type: PersonType },
}
这看起来非常像函数块语法。事实上,这就是解释器将要假设的,然后当他们看到奇怪的key:value语法时抛出语法错误,而标准表达式是预期的


换句话说,括号表示函数返回一个对象,并且不应将大括号解释为包含代码块。

返回对象用括号括起来,这样大括号就不会被视为函数体,而是一个对象。

返回对象用括号括起来,这样大括号就不会被视为函数体,而是一个对象对象。

阅读总是有用的。啊,明白了@蒂姆谢谢你的链接。我现在在高级语法下看到它。我发现用文字向谷歌表达我的问题有点困难,但现在很明显,我应该更深入地研究箭头函数。阅读总是有用的。啊,明白了@蒂姆谢谢你的链接。我现在在高级语法下看到它。我发现用文字向谷歌表达我的问题有点困难,但现在很明显,我应该更深入地研究箭头函数。
(() => {
    alert("hello!");
})();
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 },
}