2016-09-27 7 views
0

私は矢印関数についていくつかのトピックを読んだが、以下のコードではわたしを混乱させるだけだ。ES6 arrow関数とこのコンテキスト

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(); 

は、誰もが最初のものはありませんが、これは現在のオブジェクトを参照する第三の機能インナーの機能を来る方法を教えてもらえます。 arrow機能を使用していないときは、定義されている現在のスコープを参照していますか?

+0

arrow関数は、それ自身のレキシカルスコープで 'this 'を定義しないので、それ自身の中で定義されていない通常の変数を得るのと同じように、そのスコープから取得します。 –

+0

オブジェクトリテラルのプロパティ式内の現在の 'this'コンテキストは、構築されたオブジェクトではありません。 – Bergi

+0

参照[矢印関数と関数宣言/式:それらは同等か交換可能ですか?](http://stackoverflow.com/q/34361379/218196) –

答えて

2

Arrow functionsfunction文、彼らは親スコープのものにthis引数を結合すること除いに多かれ少なかれ等価です。言い換えれば

、矢印機能は、トップスコープに表示されている場合、そのthis引数は常に通常の関数内の矢印機能ながら、グローバルスコープ(例えば、ブラウザでwindowやNode.jsの中global)を参照しますthis引数は、外部関数と同じになります。コードがデモートします。

関連する問題