ES6中關於箭頭函數的介紹這裏就很少作解釋,最近關於箭頭函數的this指向很困惑,倒持了一成天,看了很多博客仍是有點霧水,但也有所啓發,作此紀錄。函數
首先,箭頭函數中的this永遠指向外層對象this
下面舉例子:spa
var x = 11; var obj = { x:22, say:()=>{ console.log(this.x); } } obj.say(); //11
這是一個很簡單的例子了,箭頭函數say裏的this指向外層對象,有的博客稱做父級對象,即爲window.x,可能有的小朋友會問爲何不是obj裏的x,由於say是obj裏的屬性,並非對象,所以這個箭頭函數是定義在對象obj內的,obj的外層對象並無,只有window了,因此箭頭函數裏的this指向window.xcode
再看下面一個例子對象
var a = 11; function test(){ this.a = 22; let b =()=>{console.log(this.a)} b(); } var x=new test(); //22
實例化後的x this即指向x,this.a=x.a 因此是22,且window.a的值仍是11,稍做修改blog
var a = 11; function test(){ this.a = 22; let b =()=>{console.log(this.a)} b(); } test(); //22
將實例化改成直接執行test函數,在執行this.a=22時,把window.a=11 覆蓋爲window.a=22,箭頭函數中的this仍是指向window,所以結果是22,window.a的值發生了改變博客