当我试图找出this
关键字的所有详细信息时,我的问题出现了。到目前为止,我了解了如何通过阅读ECMAScript®语言规范部分10.4.3 Entering Function Code和11.2.3 Function Call来设置此值。在玩一些代码时,我的问题出现了,请看下面的代码。
"use strict";
function test(){
alert(this); //undefined
};
test();
根据10.4.3第1步,将thisArg
分配给this
中的strict mode
值。根据{{3}}第7步,仅当Type(ref)
不是reference
时,才会定义thisArg。
所以我的问题是,在这种情况下,为什么Type(ref)
不是reference
?
答案 0 :(得分:0)
在这种情况下,步骤7无关紧要,因为在步骤6之后是 else ,其中说:
6.如果Type(ref)是Reference,那么
a。如果IsPropertyReference(ref)为真,那么
i。让thisValue成为GetBase(参考)。
b.Else,ref的基础是环境记录
i。让thisValue成为调用GetBase(ref)的ImplicitThisValue具体方法的结果。
在您的情况下,test
是一个参考,而不是一个PropertyReference,因此使用了ImplicitThisValue。在严格模式下,该值为undefined
。