这个箭头功能如何不会给任何错误?

时间:2019-12-18 13:53:36

标签: javascript ecmascript-6 arrow-functions

我只是遇到了一些代码,然后进行了测试,发现了一些我不理解的东西。

hey(
  () => {},
  () => {
    foo: "bar";
  }
);

为什么以下语法是有效的语法?在第一个参数中,我可以理解,因为它是一个空的函数作用域,但是在第二个参数中,它如何不会给我一个错误?

如果它要返回一个对象,则应为({...})并且不要在最后接受;,因此这意味着第二个参数不是对象。

如果它不是对象,那是什么?为什么不是语法错误?

这里发生了什么黑色的JavaScript魔术?

这是codesanbox上的一个示例,它不会给我任何语法错误。

编辑

我刚刚发现了其他一些奇怪的东西。

hey(
  () => {},
  () => {
    "bar"; // without foo:
  }
);

这怎么不会出错?

2 个答案:

答案 0 :(得分:5)

如果您跳过(),它将被解释为labeled statement

() => {
  foo: "bar";
}

如果添加其他属性,您可以清楚地看到错误

() => {
  foo: "bar",
  baz: ''
}

答案 1 :(得分:-2)

第二个参数ISN不是对象。这是一个功能。第二个论点基本上等于说

function() {
   foo: "bar";
}

尽管看起来应该正确,但实际上没有错误

如果希望箭头函数立即返回对象,则语法为

() => ({foo:'bar'})