¿Por qué las especificaciones de JS llaman a this una palabra clave y no un literal?
Parece más un literal, porque podemos usarlo como un valor, o ¿qué me estoy perdiendo?
return this¿Entonces que es?
Realmente no importa, pero es una palabra clave de acuerdo con la especificación: consulte Palabras clave y palabras reservadas y literales . La especificación también usa la frase "palabra clave this " en el texto un poco, por ejemplo (seleccionando una instancia al azar), hay este texto en la sección sobre la operación abstracta GetThisEnvironment :
...Determina el enlace de la palabra clave
thisusando el LexicalEnvironment del contexto de ejecución en ejecución...
Las versiones anteriores de la especificación eran bastante explícitas al respecto:
[De la especificación del lenguaje ECMAScript 2019]
11.6.2.1 Palabras clave
Los siguientes tokens son palabras clave de ECMAScript y no se pueden usar como identificadores en los programas de ECMAScript.
Sintaxis
Palabra clave :: uno de
awaitbreakcasecatchclassconstcontinuedebuggerdefaultdeletedoelseexportextendsfinallyforfunctionifimportininstanceofdenewreturnsuperswitchthisthrowtryvoiddevartypeofwhilewithyield
(Énfasis mío).
Continuando con tu pregunta:
Parece más un literal, porque podemos usarlo como un valor...
No creo que haya ningún conflicto entre que algo sea una palabra clave y produzca un valor cuando se usa en una expresión. this es una palabra clave que puede usar para acceder al valor de ThisBinding del registro de entorno para el contexto de ejecución actual (o el más cercano que tenga uno).
rici hizo un buen comentario en los comentarios: Dijeron que no piensan en this como un literal porque a diferencia de (decir) true y false , no tiene un valor fijo. Los literales siempre tienen el mismo valor, "a" siempre es "a" , true siempre es true , null siempre es null , etc. Pero this tiene diferentes valores en diferentes lugares del código. Realmente actúa más como una const que como un literal; una const implícita establecida en el objeto de entorno del alcance (o no, en el caso del alcance de la función de flecha).
Pero de nuevo: Realmente no importa. Es una palabra reservada que tiene un propósito y una función especial en el idioma, lo que parece suficiente para que no tengamos que preocuparnos de si es una palabra clave o un literal (o ambos). :-)