为啥“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,为啥它受到保护?