这个箭头函数怎么不报错?
How this arrow function doesn't give any error?
我只是 运行 研究了一些代码,然后我做了一个测试,发现了一些我不明白的东西。
hey(
() => {},
() => {
foo: "bar";
}
);
为什么以下语法是有效语法?在第一个参数中,我可以理解,因为是一个空函数作用域,但是在第二个参数中,它怎么不给我一个错误?
如果它返回一个对象,它应该是 ({...})
并且最后不接受 ;
,所以这意味着第二个参数不是一个对象。
如果它不是一个对象,那它是什么?为什么不是语法错误?
这里发生了什么黑javascript魔法?
这是 codesanbox 上的示例,它没有给我任何语法错误。
编辑
我刚刚又发现了一些奇怪的东西。
hey(
() => {},
() => {
"bar"; // without foo:
}
);
这个怎么不报错?
第二个参数不是对象。这是一个功能。第二个参数基本上等同于说
function() {
foo: "bar";
}
这实际上并没有出错,尽管看起来应该如此
如果你想要一个箭头函数立即return一个对象,语法是
() => ({foo:'bar'})
如果您跳过 ()
,它会被解释为 labeled statement
() => {
foo: "bar";
}
如果再加一个属性,就可以清楚地看到错误
() => {
foo: "bar",
baz: ''
}
我只是 运行 研究了一些代码,然后我做了一个测试,发现了一些我不明白的东西。
hey(
() => {},
() => {
foo: "bar";
}
);
为什么以下语法是有效语法?在第一个参数中,我可以理解,因为是一个空函数作用域,但是在第二个参数中,它怎么不给我一个错误?
如果它返回一个对象,它应该是 ({...})
并且最后不接受 ;
,所以这意味着第二个参数不是一个对象。
如果它不是一个对象,那它是什么?为什么不是语法错误?
这里发生了什么黑javascript魔法?
这是 codesanbox 上的示例,它没有给我任何语法错误。
编辑
我刚刚又发现了一些奇怪的东西。
hey(
() => {},
() => {
"bar"; // without foo:
}
);
这个怎么不报错?
第二个参数不是对象。这是一个功能。第二个参数基本上等同于说
function() {
foo: "bar";
}
这实际上并没有出错,尽管看起来应该如此
如果你想要一个箭头函数立即return一个对象,语法是
() => ({foo:'bar'})
如果您跳过 ()
,它会被解释为 labeled statement
() => {
foo: "bar";
}
如果再加一个属性,就可以清楚地看到错误
() => {
foo: "bar",
baz: ''
}