'this'在函数VS'this'中的一个方法

frr*_*lod 2 javascript this

来自Javascript-Garden:

Foo.method = function() {
  function test() {
    //this is set to the global object
  }
test();
}
Run Code Online (Sandbox Code Playgroud)

为了从测试中获得对Foo的访问,有必要在引用Foo的方法内部创建一个局部变量:

Foo.method = function() {
  var that = this;
  function test(){
    //Use that instead of this here
  }
test();
}
Run Code Online (Sandbox Code Playgroud)

有人能解释一下吗?据我所知,this如果在全局范围内调用它,则引用全局对象.但是这里它被称为函数内部,它位于一个方法(第一个例子)中.为什么它确实引用了全局对象,而第二个例子却没有?

Que*_*tin 5

据我所知,如果在全局范围内调用它,则指的是全局对象.

this将引用默认的对象,如果调用函数时不明确的情况下.范围无关紧要.(在严格模式中,它将undefined改为引用).

它究竟是为什么指的是全局对象

我们无法分辨它的含义.this取决于函数的调用方式,而不是函数的定义方式.

现在您已经更新了示例,我们可以看到它是在没有上下文的情况下调用的,因此this(在内部函数中)将是默认对象,它在Web浏览器中window(它将undefined处于严格模式).

而第二个例子没有?

在第二个示例中,内部函数不使用this(其值与前一个示例相同).

第二个例子使用了that.that在外部函数的范围内定义,并设置this为调用该函数时的值.

假设函数被调用为Foo.method()then(外部)this(因此that)将是Foo因为这是method被调用的上下文.