2016-09-27 71 views
0

我已經閱讀了箭頭功能的一些主題,但下面的代碼只是讓我困惑。ES6箭頭功能和這個上下文

var bunny = { 
    name: 'Usagi', 
    tasks: ['transform', 'eat cake', 'blow kisses'], 
    first :() => { 
    console.log(this) //does not refer to bunny 
    }, 
    second: function(){ 
    console.log(this) //refers to bunny 
    }, 
    third() { 
    this.tasks.forEach((task) => { 
     console.log(this); //refers to bunny 
    }); 
    } 
}; 

bunny.first(); 
bunny.second(); 
bunny.third(); 

有誰能告訴我第三個函數的內部函數是如何引用當前對象,而第一個函數沒有。 當我們使用箭頭函數的時候,這是不是指當前作用域被定義的地方?

+0

箭頭函數沒有在自己的詞法範圍中定義'this',所以它從外部範圍中獲取它,就像它會得到一個未定義的正常變量一樣。 – 2016-09-27 22:48:30

+0

對象文字屬性表達式中的當前'this'上下文不是構造對象。 – Bergi

+0

請參閱[箭頭函數與函數聲明/表達式:它們是等價的還是可交換的?](http://stackoverflow.com/q/34361379/218196) –

回答

2

Arrow functions或多或少相當於function語句,不同之處在於它們結合的this參數父範圍的

換句話說,如果一個箭頭函數出現在頂部範圍,其this參數將總是指全局範圍(例如,在瀏覽器中window或node.js中global),而常規的函數內的箭頭功能將其this參數與它的外部函數相同,因爲您的代碼將被展示。