我在GraphQL-related post中遇到了以下代码。 为什么在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函数不适合以上任何一项。
答案 0 :(得分:2)
使用括号可以使函数返回对象,而不必用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 },
}
}
});
但这似乎不如仅使用括号来使函数返回对象好。
答案 1 :(得分:2)
返回的对象用'()'括起来,因此花括号不是函数体,而是对象。
答案 2 :(得分:1)
如果没有括号,它将是什么样?
fields: () => {
name: { type: GraphQLString },
bestFriend: { type: PersonType },
}
看起来非常像功能块语法。实际上,这就是解释器所假定的,然后当他们看到期望标准表达式的奇怪的key: value
语法时,便抛出语法错误。
换句话说,括号中的内容表示函数返回一个对象,并且花括号不应解释为包含代码块。