简明箭头函数体语法
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",这对我个人来说更有意义。
据我了解,箭头函数体有两种:简洁型和冗长型。
()=>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",这对我个人来说更有意义。