Benannte Funktionsausdrücke in JavaScript
Nehmen wir an, wir haben einen solchen Funktionsausdruck:
let test = function() {
console.log('!');
};
test(); // gibt '!' aus
Geben wir unserer Funktion den Namen func:
let test = function func() {
console.log('!');
};
test();
Wie Sie bereits wissen, kann man nicht über diesen Namen auf die Funktion zugreifen:
let test = function func() {
console.log('!');
};
test(); // gibt '!' aus
func(); // gibt einen Fehler aus
Warum sollte man einer Funktion einen Namen geben, wenn er nicht verfügbar sein wird? Die Sache ist die, dass dieser Name von außerhalb der Funktion nicht zugänglich ist, aber innerhalb dieser Funktion zugänglich ist.
Lassen Sie uns das überprüfen:
let test = function func() {
console.log(func); // die Funktion gibt ihren eigenen Quellcode aus
};
test(); // rufen wir die Funktion auf
Rufen wir unsere Funktion inside sich selbst auf:
let test = function func() {
console.log('!'); // geben wir '!' aus
func(); // rufen uns selbst auf
};
test();
Wenn Sie diesen Code ausführen, wird eine unendliche Anzahl von Ausgaben in der Konsole erscheinen.
Tatsächlich kann unsere Funktion inside sich selbst nicht nur als func aufgerufen werden, sondern auch als test:
let test = function func() {
console.log('!');
test(); // rufen uns selbst auf
};
test();
Wo liegt der Unterschied? Der Unterschied besteht darin, dass der Name test nur eine Variable ist. Während der Skriptausführung kann unsere Funktion in eine andere Variable geschrieben oder als Parameter übergeben werden - in diesem Fall kann die Verbindung zwischen der Variable test und der Funktion verloren gehen.
Der Name func ist jedoch speziell an die Funktion gebunden, um inside der Funktion auf sie zugreifen zu können.
Solche Function Expressions mit einem Funktionsnamen werden benannte Funktionsausdrücke genannt.