同樣不太好懂的箭頭函式this的指向
阿新 • • 發佈:2018-12-12
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