ES6中關於箭頭函數中this指向問題

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的值發生了改變博客

相關文章
相關標籤/搜索