[英]ESLint error on semicolon after class declaration ECMAScript 6
我有以下代码:
class Car() {
constructor() {
// ...
}
withSemi() {
// ...
}; // ESLint does not complain here
withoutSemi() {
// ...
} // ESLint does not complain here
}; // ESLint will complain about this semicolon (no-extra-semi)
有人可以解释自动分号插入在ES6中如何在类中运行以及ESLint为什么会出现这种行为?
根据ECMAScript 2015 class
规范 ,分号是有效的ClassElement
,因此它可以存在于ClassBody
。
但是,它的语义将其视为没有任何行为(例如,请参阅NonConstructorMethodDefinitions
)。 实际上,你可以在ClassBody
中拥有你想要的ClassBody
数量的分号,它不会改变任何东西。
自动分号插入实际上并没有在这里发挥作用,或者像人们通常认为的那样经常发生。 粗略地说,ASI只发生在解析器看到不允许成为前一个块或行的一部分的情况时。 (如果您感兴趣的话,ASI的实际规则并不长;向下滚动以获取示例和实用建议。)但是在此上下文中,您可以按顺序将一堆类方法定义放在一起。 因此,列表中的下一个方法没有任何“意外”,因此不会在它们之间插入分号。
我不知道决定的历史,但我认为分号是有效的ClassElement
因为它们已经作为空语句有效,如果你不能将分号放在类体中,它可能会让人感到困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.