为什么在 ECMAScript 规范中将语句称为子句?

Why are statements referred to as clauses in the ECMAScript spec?

通过 ECMAScript 规范(ECMA-262 - 第 9 版)我注意到在很多地方术语“子句”用于代替“语句”。更具体地说,以下关键字被称为子句:catchextendscasedefaultimport。更准确地说,最后三个关键字仅在 抽象操作 中被称为子句,从未在实际文本中提及。

这里有一些例子:

It may be used as the value of an extends clause of a class definition.

(p. 447, ch. 19.1.1 The Object Constructor)

CaseBlock [Yield, Await, Return] :
     { CaseClauses [?Yield, ?Await, ?Return] opt }
     { CaseClauses [?Yield, ?Await, ?Return] opt DefaultClause [?Yield, ?Await, ?Return]
         CaseClauses [?Yield, ?Await, ?Return] opt }

(p. 331, ch. 13.12 The switch Statement)

Usually a Lexical Environment is associated with some specific syntactic structure of ECMAScript code such as a FunctionDeclaration, a BlockStatement, or a Catch clause of a TryStatement...

(p. 128, ch. 8.1 Lexical Environments)

ImportDeclaration :
     import ImportClause FromClause ;
     import ModuleSpecifier ;

(p. 418, ch. 15.2.2 Imports)

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

I understand that import is technically a declaration statement (still a statement though) ...

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

... but what about the others? Why are catch, case and extends not referred to as statements?

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

没用