2017-07-13 3 views
4

Mit Babel habe ich etwas merkwürdiges bemerkt.Babel Pfeilfunktion Kompilierung in ES5

Sollte nicht const app =() => {} gleich var app = function() {} sein?

Babel gibt var app = function app() {} zurück.

+4

Nein, Babel ist korrekt, da eine Pfeilfunktion, die einer Variablen zugewiesen ist, theoretisch eine Namenseigenschaft haben sollte, die dem Namen dieser Variablen entspricht, um Stack-Traces zu unterstützen. Schauen Sie sich den Link [this] (http://2ality.com/2015/09/function-names-es6.html) an. –

Antwort

4

Nein, Babel ist korrekt, da eine Pfeilfunktion, die einer Var zugewiesen ist, in der Theorie einen Namen haben sollte, der dem Namen dieser Variablen entspricht, um Stapelspuren und Reflektionen zu unterstützen. Weitere Informationen finden Sie unter this link. Kurze Zusammenfassung, falls es alt wird:

Die Namenseigenschaft einer Funktion wird zur Deklarationszeit erstellt. Der Name Eigenschaft eines Funktionsausdruck wird aus dem Namen ableiten Bindung:

var foo = function() {}; 
console.log(foo.name); // foo 

Pfeil Funktionen haben das gleiche Verhalten:

var foo =() => {}; 
console.log(foo.name); // foo 

Da dies eigentlich nicht standardisiert werden, bis ES 2015/ES 6 babel hat tatsächlich den Namen hinzufügen ein named function expression zu erstellen:

var foo = function foo() {}; // notice it's function *foo* now 

zu unterstützen Legacy-Umgebungen.

Verwandte Themen