从箭头函数返回对象时,由于语法上的歧义{}
和return
这意味着我不能写p => {foo: "bar"}
,而必须写p => { return {foo: "bar"}; }
。
如果 arrow 函数返回的不是对象,则{}
和return
都是不必要的,例如: p => "foo"
。
p => {foo: "bar"}
返回undefined
。
修改后的p => {"foo": "bar"}
抛出“ SyntaxError
:意外令牌:' :
'” 。
有什么明显的我想念的东西吗?
您必须将返回的对象文字包装在括号中。否则,花括号将被视为表示功能的主体。以下作品:
p => ({ foo: 'bar' });
您不需要将任何其他表达式包装到括号中:
p => 10;
p => 'foo';
p => true;
p => [1,2,3];
p => null;
p => /^foo$/;
等等。
参考: MDN - 返回对象文字
您可能想知道,为什么语法有效(但不能按预期工作):
var func = p => { foo: "bar" }
这是因为JavaScript 的标签语法:
因此,如果将上面的代码转换为 ES5,它应该看起来像:
var func = function (p) {
foo:
"bar"; //obviously no return here!
}
如果 arrow 函数的主体用花括号括起来,则不会隐式返回。将对象包装在括号中。它看起来像这样。
p => ({ foo: 'bar' })
通过将主体包装在括号中,该函数将返回{ foo: 'bar }
。
希望可以解决您的问题。如果不是这样,我最近写了一篇有关 Arrow 函数的文章,其中对其进行了更详细的介绍。希望对你有帮助。 Javascript 箭头函数