EcmaScript中调用表达式使用什么语法?单标识符参数如何匹配规则
你对产生式规则的理解存在偏差,核心问题是误将AssignmentExpression等同于仅包含赋值操作的表达式,实际上ES规范中的AssignmentExpression是涵盖范围极广的表达式分类,所有基础表达式都属于它的子集。
按照规范的语法递归规则:
AssignmentExpression本身包含ConditionalExpressionConditionalExpression向下递归包含逻辑表达式、位运算表达式、比较表达式、算术表达式,最终落到PrimaryExpressionPrimaryExpression则直接包含标识符、字面量、括号表达式等最基础的语法单元
你示例中的foo是标识符,完全属于合法的AssignmentExpression,对应推导链路如下:
bar(foo)整体匹配CallExpression规则,向下对应CoverCallExpressionAndAsyncArrowHead的MemberExpression Arguments分支bar作为标识符属于MemberExpression(foo)匹配Arguments的( ArgumentList )分支- 括号内的单个
foo匹配ArgumentList的第一个分支:单个AssignmentExpression
完全符合你贴出的所有产生式规则,不存在遗漏的情况。
内容的提问来源于stack exchange,提问作者Shnick
相关产品推荐
相关产品推荐

