1. 程式人生 > >同樣不太好懂的箭頭函式this的指向

同樣不太好懂的箭頭函式this的指向

1、先來看一個例子吧:(輸出什麼呢?)

var foo={
  foo:function(){
    console.log(this);
  },
  b:()=>{console.log(this)}
}
foo.foo();    foo.b();

答:foo.foo()//foo;

       foo.b()//window;

第一個foo.foo()是普通函式的執行,裡面的this指向呼叫foo函式的物件foo,那麼第二個為什麼是window呢?我開始是很不能 理解的,不是this指向定義時所在的物件嗎?

其實我覺得這句話解釋的不是很準確,記住下面這句話才是最重要的,this

指向的固定化,並不是因為箭頭函式內部有繫結this的機制,實際原因是箭頭函式根本沒有自己的this,導致內部的this就是外層程式碼塊的this。

所以在這裡箭頭函式內的this實際上是foo物件中的this。不懂什麼意思,看下面這個程式碼塊兒:

var foo={
  abs:this,
  foo:function(){
    console.log(this.abs);
    var a=()=>{console.log(this)};
    a();
  },
  b:()=>{console.log(this)}
}
foo.foo();
foo.b();

 abs綁定了foo物件的this,這裡foo是個全域性變數,裡面的this也是指向window。所以結果為:window、foo、window;

a箭頭函式的this就是foo()函式的this。b箭頭函式的this就是foo物件中的this