¿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
this
usando 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
await
break
case
catch
class
const
continue
debugger
default
delete
do
else
export
extends
finally
for
function
if
import
in
instanceof
denew
return
super
switch
this
throw
try
void
devar
typeof
while
with
yield
(É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). :-)