[英]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.