有人在几年前就问了一个非常相似的问题 - why is class a reserved word in JavaScript?。答案是,所以你可以添加我们现在拥有的class
关键字。
但我想进一步提出这个问题。为什么有一个class
关键字使得必须禁止使用class
作为标识符? JS语法中有什么东西可以使它变得模棱两可吗?或者是这样可以用某种解析器解析JS?我不认为这样的事情是不可能的(虽然当然很愚蠢):
class class {
// ...
}
let x = new class();
请不要回答“因为规范如此说明”或“根据定义禁止将关键字作为标识符”。为什么规范必须这样?或者它是一个任意或aestetic descision?
这个问题并不是完全闲置的好奇心。 class
是禁用标识符的事实出现在辩论中,例如,React是否应该在JSX中使用class
或className
。
如果class可以用作这样的标识符:
class class
{ // a class is followed by the classes body
constructor() { /*...*/ }
}
const el = new class
{ // if class is not reserved, this is just a regular block
alert("test");
}
然后new class
部分无法与类表达式区分开来:
const el = new class
{
// block or class body?!
constructor() { /*???*/ }
}