Beide folgenden Schnipsel drucken "Pfeil". Ich würde gerne wissen warum. Haben Pfeilfunktionen eine höhere Priorität als die normalen Funktionen, wenn beide denselben Namen haben?
function increment(){
alert("normal")
}
var increment = () => {
alert("arrow")
}
increment(); //prints arrow
var increment = () => {
alert("arrow")
}
function increment(){
alert("normal")
}
increment(); //prints arrow
javascript
Neon
quelle
quelle
Antworten:
Dies hat nichts mit Pfeilfunktionen zu tun. Vielmehr werden reguläre Funktionen (und
var
Deklarationen) gehisst ; Unabhängig davon, wo Sie sie schreiben, werden sie an die Spitze ihres Bereichs verschoben. Tatsächlich sind beide Codebeispiele völlig identisch und sehen folgendermaßen aus:Der Zuordnungsteil von
var increment = ...
erfolgt in beiden Fällen nach der angehobenen Funktion undvar
Deklaration. Unabhängig davon, wo Sie diefunction increment() { }
Deklaration tatsächlich geschrieben haben , wird sie über die Zeile angehoben, die die Zuweisung zurincrement
Variablen ausführt .Aus diesem Grund funktioniert der folgende Code immer noch, obwohl die Funktion anscheinend nach ihrer Verwendung definiert wurde:
Wenn Sie Gleiches mit Gleichem vergleichen möchten, müssen Sie
var increment = () => { ... }
mitvar increment = function () { ... }
zwei Aufgaben vergleichen. Die Ergebnisse sehen folgendermaßen aus:vs.
In beiden Fällen gibt es eine einzige hochgezogene
var increment;
Deklaration, und dann erfolgen die Zuweisungen in der Reihenfolge, in der sie geschrieben wurden, was bedeutet, dass die letzte Zuweisung gewinnt.Abgesehen davon ist dies einer der Hauptgründe,
let x = () => { }
um "alten" Funktionsdeklarationen vorzuziehen .let
wird nicht gehisst, daher existiert die Funktion ab dem Zeitpunkt, den Sie natürlich erwarten würden, anstatt an die Spitze Ihres Bereichs zu springen.quelle