为啥“true && () => ”会产生“Uncaught SyntaxError: Malformed arrow function parameter list”? [复制

Posted

技术标签:

【中文标题】为啥“true && () => ”会产生“Uncaught SyntaxError: Malformed arrow function parameter list”? [复制]【英文标题】:Why does "true && () => " produce "Uncaught SyntaxError: Malformed arrow function parameter list"? [duplicate]为什么“true && () => ”会产生“Uncaught SyntaxError: Malformed arrow function parameter list”? [复制] 【发布时间】:2019-08-22 16:30:41 【问题描述】:

以下代码,当执行时,

true && () => 

产量

Uncaught SyntaxError: Malformed arrow function parameter list

为什么?

编辑:我知道将函数包装在括号中是可行的,谢谢大家,但我想了解为什么解析器一开始就不能确定它是一个函数。

【问题讨论】:

true && (() => ) 应该可以工作 它与解析器有关,但我不确定它是如何被解析以致失败的。 这里是V8报解析错误的地方:github.com/v8/v8/blob/4b9b23521e6fd42373ebbcb20ebe03bf445494f9/… 【参考方案1】:

原因是由于第一部分 true || (a) 被自己解析,然后解析器试图解析其余部分 => ,从而导致错误。

【讨论】:

起初我觉得解析器会像这样解析一组空的括号让我感到惊讶,但我猜一组空的括号会有效解析,因为它可能是一个函数调用。【参考方案2】:

true && ()解析为参数列表。

【讨论】:

为什么我会在这种情况下收到该错误:const r2 = await () => !r1.canceled && fsp.readFile('./config.json', 'utf8')?有什么想法吗?【参考方案3】:

因为箭头函数有特殊的解析规则。请参阅解析顺序段落中的official documentation。

【讨论】:

仅当您想返回一个值时。不包含return 没有语法问题。 @ziggywiggy 你是对的,它不是正文块,而是我已经链接的官方文档中所述的解析顺序。答案已编辑。 MDN 不是“官方文档”。无论如何,这现在是一个仅链接的答案 - 您应该在答案本身中包含要点。

以上是关于为啥“true && () => ”会产生“Uncaught SyntaxError: Malformed arrow function parameter list”? [复制的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?