2016-04-05 3 views
6

Ich habe einen interessanten Fall gefunden, in dem "use strict" nicht wie erwartet in Javascript funktioniert. Folgende FunktionenVerwenden Sie streng in Javascript nicht für Fettpfeil arbeiten?

"use strict"; 

var y =() => { 
    console.log(this); 
} 

var x = function() { 
    console.log(this); 
} 

x(); // undefined due to use strict 
y(); // window object 

Ich denke, sollte Fett Pfeil Kontext auch durch undefinierte überschrieben werden, oder ist meine Annahme falsch?

+1

Da Sie dies im globalen Bereich ausführen (wo 'das' das 'Fenster'-Objekt ist) und' das' in Pfeilfunktionen lexikalisch ist, sehe ich nicht, was hier unerwartet ist? – Bergi

Antwort

7

MDN sagt von arrow functions:

Beziehung mit striktem Modus

Da this lexikalisch ist, strenge Modus Regeln im Hinblick auf this nur ignoriert werden.

var f =() => {'use strict'; return this}; 
f() === window; // or the global object 

Die Regeln der lexikalischen this haben Vorrang vor den strengen-Modus this Regeln.

können wir dies leicht sehen, in der ES2015-Spezifikation durch die Klar Englisch Beschreibung der möglichen Werte für a function's [[ThisMode]] slot untersuchen, welche lexical sein kann, strict oder global:

Legt fest, wie this Referenzen innerhalb der interpretiert werden Formalparameter und Code-Rumpf der Funktion. lexical bedeutet, dass this sich auf den this Wert einer lexikalisch umschließenden Funktion bezieht. strict bedeutet, dass der Wert this genau so verwendet wird, wie durch einen Aufruf der Funktion bereitgestellt. global bedeutet, dass ein this Wert von undefined als eine Referenz auf das globale Objekt interpretiert wird.

Mit anderen Worten, das Verhalten einer Funktion this kann entweder streng, nicht-strikt oder lexikalisch sein. Wenn die Funktion [[ThisMode]] lexikalisch ist (wie es für eine Pfeilfunktion der Fall ist), macht sie den strikten/nicht-strikten Status der Funktion irrelevant für das Bestimmen des this-Einstellungsverhaltens.

Verwandte Themen