setTimeout()函式中為什麼this指向全域性物件window

admin發表於2017-03-29

本章節介紹一下為什麼在某些場景下this會指向全域性的window物件。

當然this在setTimeout()中的指向並不是都是window物件,而是在一些情況下,看起來是指向某個物件,但實際上是指向window的,下面就通過程式碼例項分析一下此種情況,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
var str="全域性";
var obj={
  str:"物件",
  func:function(){
    setTimeout(this.test,1000);
  },
  test:function(){
    console.log(this.str);
  }
}
obj.func()

上面程式碼的輸出結果是"全域性",這說明test函式中的this指向是全域性物件。

之所以這樣,是因為上面的程式碼等效於如下程式碼:

[JavaScript] 純文字檢視 複製程式碼
var str="全域性";
var obj={
  str:"物件",
  func:function(){
        var done=this.test
    setTimeout(done,1000);
  },
  test:function(){
    console.log(this.str);
  }
}
obj.func()

相關文章