Почему «класс» должен быть зарезервированным ключевым словом в JavaScript? - PullRequest
0 голосов
/ 01 сентября 2018

Кто-то уже задавал очень похожий вопрос несколько лет назад - почему класс является зарезервированным словом в JavaScript? . Ответ был таким, чтобы вы могли добавить ключевое слово class, которое у нас есть сейчас.

Но я бы хотел сделать еще один шаг вперед. Почему наличие ключевого слова class делает необходимым запретить с использованием class в качестве идентификатора? Есть ли в грамматике JS что-нибудь, что сделало бы это неоднозначным? Или это так, что JS может быть проанализирован с определенным парсером? Я не вижу, что подобное было бы невозможно (хотя, конечно, глупо):

class class {
    // ...
}

let x = new class();

Пожалуйста, не отвечайте "потому что спецификация так говорит" или "ключевое слово запрещено как идентификатор по определению". Почему спецификация должна быть такой? Или это произвольное или эстетическое решение?

Этот вопрос не совсем праздное любопытство. Тот факт, что class является запрещенным идентификатором, возникает в дискуссии о том, должен ли React использовать class или className в JSX, например.

1 Ответ

0 голосов
/ 01 сентября 2018

Если в качестве идентификатора можно использовать класс:

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