`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
是文字,因为不像(比如)true
和 false
,它没有固定值。文字总是具有相同的值,"a"
总是 "a"
,true
总是 true
,null
总是 null
,等等。但是 this
在代码的不同地方有不同的值。它实际上更像是 const
而不是文字;在作用域的环境对象中设置的隐式 const
(或者在箭头函数作用域的情况下不设置)。
但是再说一次:真的没关系。它是一个在语言中具有特殊用途和功能的保留字,这似乎足以让我们不必担心它是关键字还是文字(或两者)。 :-)
为什么 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
是文字,因为不像(比如)true
和 false
,它没有固定值。文字总是具有相同的值,"a"
总是 "a"
,true
总是 true
,null
总是 null
,等等。但是 this
在代码的不同地方有不同的值。它实际上更像是 const
而不是文字;在作用域的环境对象中设置的隐式 const
(或者在箭头函数作用域的情况下不设置)。
但是再说一次:真的没关系。它是一个在语言中具有特殊用途和功能的保留字,这似乎足以让我们不必担心它是关键字还是文字(或两者)。 :-)