为什么在`JavaScript(ECMA-262 5.1)`中调用函数的`Type`不是`reference`?

时间:2015-03-31 18:34:14

标签: javascript ecmascript-5

当我试图找出this关键字的所有详细信息时,我的问题出现了。到目前为止,我了解了如何通过阅读ECMAScript®语言规范部分10.4.3 Entering Function Code11.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

1 个答案:

答案 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