为什么“类”必须是JavaScript中的保留关键字?

时间:2018-09-01 11:34:22

标签: javascript language-design

几年前,有人已经问过一个非常类似的问题-why is class a reserved word in JavaScript?。答案是,以便您可以添加我们现在拥有的class关键字。

但是我想再进一步解决这个问题。为什么拥有class关键字使禁止使用class作为标识符? JS语法中是否有任何歧义?还是用某种解析器就可以解析JS?我看不到这样的事情是不可能的(尽管很愚蠢):

class class {
    // ...
}

let x = new class();

请不要回答“因为规格说明如此”或“根据定义,关键字被禁止用作标识符”。为什么规格必须是这种方式?还是武断的决定?

这个问题并不完全是出于好奇。例如,{@ {1}}是一个禁止的标识符这一事实浮出水面,例如React是否应在JSX中使用classclass

1 个答案:

答案 0 :(得分:2)

如果类可以用作这样的标识符:

 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() { /*???*/ }
 }