2017-09-06 3 views
0

Ich bin ein Ausschnitt aus Mozilla docs einfügen.Pfeilfunktion und `this`

Eine Pfeilfunktion erstellt dies nicht selbst, der Wert des umschließenden Ausführungskontextes wird verwendet. Somit wird in dem folgenden Code, der dies in der Funktion, der setInterval geleitet wird, hat den gleichen Wert wie dies in der umschließenden Funktion:

function Person(){ 
    this.age = 0; 

    setInterval(() => { 
    this.age++; // |this| properly refers to the person object 
    }, 1000); 
} 
var p = new Person(); 

Meine Verwirrung, wenn der obige Code ausgeführt wird, wird die setInterval-Funktion sein ersetzt durch seine Implementierung mit der anonymen Funktion, die als Argument übergeben wurde.

Zeile 00: Hier wird nicht auf die anonyme Funktion verwiesen, da die Pfeilfunktion verwendet wird und auf den umschließenden Ausführungskontext zeigt. Für das, was ich verstanden habe, ist der umschließende Ausführungskontext hier die Funktion setInterval, aber dafür ist keine Alterseigenschaft definiert. Ich weiß, dass ich falsch liege, wenn das Alter auf die Person hinweist, da es gut läuft.

+0

Mögliches Duplikat [Wann soll ich Pfeil Funktionen in ECMAScript 6?] (Https://stackoverflow.com/questions/22939130/when-should-i-use-arrow-functions-in-ecmascript- 6) – Erazihel

Antwort

4

Wo war die Funktion erstellt, nicht dort, wo es genannt wurde, das heißt es enclosing context ist. Ihre Funktion wird in der function Person erstellt, so dass diese Funktion der umschließende Kontext für die arrow function ist.

Sie erstellen nur eine arrow function und übergeben sie an die setInterval, es ist nicht in der setInterval Definition erstellt. Dies entspricht

function Person(){ 
    this.age = 0; 

    setInterval(() => { 
    this.age++; 
    }, 1000); 
} 

entspricht. Hier sehen Sie, dass der umschließende Kontext funcPerson ist.

function Person(){ 
    this.age = 0; 

    var func =() => { 
     this.age++; 
    }; 

    setInterval(func, 1000); 
} 
+0

danke für die rechtzeitige Klärung –