什么是EcmaScript语法中的[Yield,Await,In,Return]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是EcmaScript语法中的[Yield,Await,In,Return]相关的知识,希望对你有一定的参考价值。

EcmaScript中的许多作品都带有以下“修饰符”:

[Yield, Await, In, Return]

这里有一些例子:

ArrayLiteral[Yield, Await]:
  ...

ElementList[Yield, Await]:
 ... AssignmentExpression[+In, ?Yield, ?Await]

我已经通过规范搜索了解释,特别是Grammar Notation部分,但找不到它。应该在那里。有人可以请我指出相关段落并提供一个简短的解释吗?

答案

Section 5.1.5: Grammar Notation -

可以通过“[参数]”形式的下标注释来参数化生成,其可以作为由生产定义的非终结符号的后缀。 “参数”可以是单个名称,也可以是逗号分隔的名称列表。参数化生产是一组生产的简写,这些生产定义参数名称的所有组合,前面带有下划线,附加到参数化的非终结符号。这意味着:

StatementList[Return]:
   ReturnStatement
   ExpressionStatement

是一个方便的缩写:

StatementList:
   ReturnStatement
   ExpressionStatement
StatementList_Return:
   ReturnStatement
   ExpressionStatement

然后:

StatementList[Return, In]:
   ReturnStatement
   ExpressionStatement

是以下内容的缩写:

StatementList:
   ReturnStatement
   ExpressionStatement
StatementList_Return:
   ReturnStatement
   ExpressionStatement
StatementList_In:
   ReturnStatement
   ExpressionStatement
StatementList_Return_In:
   ReturnStatement
   ExpressionStatement

多个参数产生组合数量的产品,并非所有产品都必须在完整的语法中引用。

它继续谈论有关参数化右侧,添加“选择”等。

(搜索时,不要只是寻找[Return],特别是这样,因为它们可以并且通常会出现在像[Yield, Await, Return][?Yield, ?Await, ?Return]这样的组中,就像Block的语法一样。)

Section 12.1.1: Identifiers - Static Semantics: Early Errors -

如果此生产具有[Yield]参数且Identifier的StringValue为“yield”,则为语法错误。

如果此生产具有[Await]参数且Identifier的StringValue为“await”,则为语法错误。

Section 12.10: Relational Operators -

需要[In]语法参数以避免在in语句中将in运算符与for运算符中的qazxswpoi运算符混淆。

以上是关于什么是EcmaScript语法中的[Yield,Await,In,Return]的主要内容,如果未能解决你的问题,请参考以下文章

C#中的yield return与Unity中的Coroutine(协程)

ECMAScript 文档中的 SpreadElement 是啥?和 MDN 的 Spread 语法一样吗?

yield表达式 python语法

yield-Python大牛必须掌握的高端语法

ECMAScript5新增对象语法糖getter和setter

快速掌握ECMAScript 6中的let语法