教辨別this指向問題 包括箭頭函式

PilotKing發表於2020-11-26

在function函式中

function a(){
	console.log(this)
}
a() //window  誰呼叫就指向誰

物件中

var obj = {
  aaa() {
    setTimeout(function () {
      console.log(this);//window  因為setTimeout是屬於window的相當於window.裡面的方法
    });
    console.log(this);//obj
  },
};
obj.aaa();

建構函式中

function A (){
	aaa(){
		console.log(this)
	}
}
var a = new A()
a.aaa() // this指向a例項物件  因為是a呼叫的

在箭頭函式中

箭頭函式沒有this 他會向上一層的作用域找this

ar obj = {
  aaa() {
    setTimeout(function () {
      console.log(this);//window 
      //console.log(this) 這層才是箭頭函式的this 這句話的this就是下面這行程式碼的輸出的this
      setTimeout(()=>{
		console.log(this) //window
	  })
    });
    console.log(this);//obj
  },
};
obj.aaa();

所以如果想找箭頭函式的this 就相當於在找上一層作用域的this 如果上一層還是箭頭函式 那麼它會再往上直到找到為止

相關文章