简明箭头函数体语法

Concise arrow function body grammar

据我了解,箭头函数体有两种:简洁型和冗长型。

()=>1 // Concise
()=>{} // Not concise?

Concise 没有大括号,是一个 AssignmentExpression,而 verbose 大概是一个块,但我不确定。

14.2 of the spec定义了箭头函数的语法,但在简洁体的定义中似乎包含了大括号。

1.  ConciseBody[In]:
2.      [lookahead ≠ {]ExpressionBody[?In, ~Await]
3.      {FunctionBody[~Yield, ~Await]}

我哪里错了? "verbose" 规范中定义的正文语法在哪里?

看起来它在 ConciseBody 下指定了两个选项:ExpressionBody(无括号) FunctionBody 括在括号中。

规范的编写格式在 "Grammar Notation"、https://tc39.es/ecma262/#sec-grammar-notation

下进行了说明

根据规范术语,每个 ArrowFunction 都有一个 ConsiseBody,然后将它们区分为短 ExpressionBody 和普通大括号 FunctionBody

JS 世界中常用的术语(如 here at MDN)确实经常区分 "concise body" 和 "block body",这对我个人来说更有意义。