【问题标题】:Why are statements referred to as clauses in the ECMAScript spec?为什么在 ECMAScript 规范中将语句称为子句?
【发布时间】:2019-12-12 09:04:32
【问题描述】:

通过 ECMAScript 规范(ECMA-262 - 第 9 版)我注意到在许多地方使用术语“clause”而不是“声明”。更具体地说,以下关键字被称为子句:catchextendscasedefaultimport。更准确地说,最后三个关键字仅在抽象操作中被称为子句,在实际文本中从来没有。

这里有一些例子:

它可以用作类定义的 extends 子句的值。

(第 447 页,第 19.1.1 章对象构造函数)

CaseBlock [Yield, Await, Return]:
{ CaseClauses [?Yield, ?Await, ?Return] opt }
{ CaseClauses [?Yield, ?Await, ?Return] optDefaultClause [?Yield, ?Await, ?Return]子>
CaseClauses [?Yield, ?Await, ?Return] opt }

(第 331 页,第 13.12 章 switch 语句)

通常一个词法环境是 与 ECMAScript 代码的某些特定句法结构相关联,例如 FunctionDeclarationBlockStatement、 或 TryStatementCatch 子句...

(第 128 页,第 8.1 章词汇环境)

进口声明
import ImportClause FromClause ;
导入 ModuleSpecifier ;

(第 418 页,第 15.2.2 章进口)

我知道import 在技术上是一个声明声明(尽管仍然是一个声明),但是其他的呢?为什么catchcaseextends不被称为语句?

【问题讨论】:

  • "clause" 基本上是“语句的一部分”,catch 不是语句,因为你不能只写一个catch 语句;它必须是 try - catch 语句的一部分。
  • 因为他们无法自立。它们是更大事物的一部分。
  • 这个词来自一般的语法命名法。 “从句”是句子的一部分,而不是整个句子。
  • @Pointy 啊,我明白了。这回答了我的问题。

标签: javascript terminology specifications ecma


【解决方案1】:

我知道import 在技术上是一个声明声明(尽管仍然是一个声明)...

不,import 本身只是一个关键字。 import x from "y"; 作为一个整体是一个声明(因为它可以独立存在)。

...但是其他人呢?为什么 catch、case 和 extends 不被称为语句?

因为它们本身不是陈述。它们不代表单个动作,而是更大的一部分。 catch 没有try 就没有用,extends 没有class 就没有用,case 没有switch 就没有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2011-12-26
    • 1970-01-01
    • 2021-09-17
    • 2021-11-04
    • 2011-06-17
    相关资源
    最近更新 更多