javascript - EcmaScript 中的调用表达式使用什么语法?
问题描述
我试图更好地理解 EcmaScript 规范中的语法是如何定义的。但是,我似乎很难理解规范中函数调用的语法是如何定义的,请采用以下函数调用(假设bar
已经定义):
const foo = 1;
bar(foo);
我特别想找到允许该语法的bar(foo);
语法 - 我尝试使用 Felix Kling 的这个伟大的AST explorer并从中找到了CallExpression使用的CoverCallExpressionAndAsyncArrowHead:
CoverCallExpressionAndAsyncArrowHead[Yield, Await] :
- MemberExpression [?Yield, ?Await]参数[?Yield, ?Await]
因此,根据我的理解,标识符bar
是MemberExpression并且(foo)
由Arguments生产规则定义,但是,在查看 Arguments 的生产规则时,似乎没有任何允许(和(foo)
之间的单个标识符):(
)
参数[Yield, Await]:
- ( )
- (ArgumentList [?Yield, ?Await])
- ( ArgumentList [?Yield, ?Await] , )
ArgumentList [屈服,等待]:
- 赋值表达式[+In, ?Yield, ?Await]
- ... 赋值表达式[+In, ?Yield, ?Await]
- ArgumentList [?Yield, ?Await] , AssignmentExpression [+In, ?Yield, ?Await]
- ArgumentList [?Yield, ?Await] , ... AssignmentExpression[+In, ?Yield, ?Await]
据我所见,这些都没有涵盖参数列表仅包含一个标识符的(foo)
情况,它涵盖了其他情况,例如(baz = 1)
(因为 baz=1 在这种情况下将是一个AssignmentExpression)等...,但没有一种情况是传递给函数的单个标识符/文字。我是在看错误的生产规则还是我在这里没有正确理解某些东西?如果我遗漏了一些明显的东西,请道歉。
解决方案
推荐阅读
- wordpress - WordPress手机人像全角问题
- godot - 如何访问 MeshInstance 的网格数据?
- javascript - 出现键盘时屏幕应向上移动而不会干扰页脚
- php - Mysql与PHP的连接给出500错误
- javascript - owl carousal 中的功能问题
- azure-sql-database - 如何设置/修改从 azure web app 到 azure sql 数据库的连接池 - 慢速应用问题
- python-3.x - 软件包安装失败 - OsX 中的 psycopg2
- python - 重命名多个子目录中的单个 .txt 文件
- c# - Discord:使用 .NET 库更改区域?
- vue.js - 将数据从 Vuex getter 传递到子组件的问题