`this` 是关键字还是文字?

Is `this` a keyword or a literal?

为什么 JS 规范称 this 关键字而不是文字?

它更像是一个文字,因为我们可以将它用作一个值,或者我错过了什么?

return this

那是什么?

其实无所谓,但根据规范是关键字:参见Keywords and Reserved Words and Literals. The spec also uses the phrase "keyword this" in the text a fair bit, for instance (picking an instance at random), there's this text in the section on the abstract GetThisEnvironment操作:

...It determines the binding of the keyword this using the LexicalEnvironment of the running execution context...

规范的早期版本 quite explicit 关于它:

[From The ECMAScript 2019 Language specification]

11.6.2.1 Keywords

The following tokens are ECMAScript keywords and may not be used as Identifiers in ECMAScript programs.

Syntax

Keyword :: one of    await break case catch class const continue debugger default delete do else export extends finally for function if import in instanceof new return super switch this throw try typeof var void while with yield

(我的重点。)

继续你的问题:

It more seems to be a literal, because we can use it as a value...

我认为作为关键字的某物与在表达式中使用时产生值之间没有任何冲突。 this 是一个关键字,可用于访问当前执行上下文(或最近的执行上下文)的环境记录的 ThisBinding 的值。

rici 在评论中提出了一个非常好的观点:他们说他们不认为 this 是文字,因为不像(比如)truefalse,它没有固定值。文字总是具有相同的值,"a" 总是 "a"true 总是 truenull 总是 null,等等。但是 this在代码的不同地方有不同的值。它实际上更像是 const 而不是文字;在作用域的环境对象中设置的隐式 const(或者在箭头函数作用域的情况下不设置)。

但是再说一次:真的没关系。它是一个在语言中具有特殊用途和功能的保留字,这似乎足以让我们不必担心它是关键字还是文字(或两者)。 :-)