我只是遇到了一些代码,然后进行了测试,发现了一些我不理解的东西。
hey(
() => {},
() => {
foo: "bar";
}
);
为什么以下语法是有效的语法?在第一个参数中,我可以理解,因为它是一个空的函数作用域,但是在第二个参数中,它如何不会给我一个错误?
如果它要返回一个对象,则应为({...})
并且不要在最后接受;
,因此这意味着第二个参数不是对象。
如果它不是对象,那是什么?为什么不是语法错误?
这里发生了什么黑色的JavaScript魔术?
这是codesanbox上的一个示例,它不会给我任何语法错误。
我刚刚发现了其他一些奇怪的东西。
hey(
() => {},
() => {
"bar"; // without foo:
}
);
这怎么不会出错?
答案 0 :(得分:5)
如果您跳过()
,它将被解释为labeled statement
() => {
foo: "bar";
}
如果添加其他属性,您可以清楚地看到错误
() => {
foo: "bar",
baz: ''
}
答案 1 :(得分:-2)
第二个参数ISN不是对象。这是一个功能。第二个论点基本上等于说
function() {
foo: "bar";
}
尽管看起来应该正确,但实际上没有错误
如果希望箭头函数立即返回对象,则语法为
() => ({foo:'bar'})