Funktionserklärung
Funktion foo () {}Die Funktion foo wird vor Ausführung des gesamten Programms gehisst, sodass sie im gesamten Bereich (Umfang) verfügbar ist, das die FOO -Funktion definiert. Sogar das Aufrufen vor der Funktionsdefinition ist in Ordnung.
foo (); // funktioniert, weil FOO erstellt wurde, bevor dieser Code foo () {} ausgeführt wurdeDa ich vorhabe, einen Artikel zu schreiben, der speziell für den Umfang einführt, werde ich ihn hier nicht ausführlich erklären.
Funktionsausdrücke
Für Funktionserklärungen ist der Name der Funktion erforderlich, aber für Funktionsausdrücke ist er optional. Daher erscheinen anonyme Funktionsausdrücke und genannte Funktionsausdrücke. wie folgt:
Funktionserklärung: Funktion FunktionName () {}
Funktionserklärung: Funktion FunktionName [optional] () {}
Dann weiß ich, dass es ein Funktionsausdruck sein muss, wenn es keinen Funktionsnamen gibt, aber wie sollten wir beurteilen, ob es einen Funktionsnamen gibt?
JavaScript gibt an, dass, wenn der gesamte Funktionskörper Teil eines Ausdrucks ist, es sich um einen Funktionsausdruck handelt, andernfalls handelt es sich um eine Funktionserklärung. Das Folgende ist der Ausdruck:
var fuc = foo () {}Lassen Sie uns ein paar weitere extreme Ausdrucksbeispiele geben:
! Funktion foo () {} true && function foo () {}Die obigen Aussagen dienen nur dazu, Funktionsausdrücke zu unterscheiden, und sie sind im Allgemeinen nicht so geschrieben. Verwenden Sie dann ein Vergleichsbeispiel, um den Effekt anzuzeigen:
foo1 (); // foo1 ist nicht definiert foo2 (); // funktioniert, weil foo2 vor diesem Code erstellt wurde! Funktion foo1 () {alert ('foo1 wakwes');Anonyme Funktionsausdrücke
var foo = function () {};Das obige Beispiel weist dem variablen Foo eine anonyme Funktion zu.
foo; // 'undefined'foo (); // Dies wirft eine Typeerrorvar foo = function () {} auf;Da Var eine Deklaration ist, wird die variable Foo hier (beworben). Wenn das Programm ausgeführt wird, ist die variable Foo aufrufbar.
Da die Zuweisungsanweisung jedoch nur zur Laufzeit wirksam wird, ist der Wert der variablen Foo undefiniert.
Benannte Funktionsausdrücke
Eine andere Sache, über die man sprechen muss, ist die Aufgabe benannter Funktionen.
var foo = function bar () {bar (); // arbeitet}; bar (); // ReferenzErrorHier ist die benannte Funktionsleiste dem variablen Foo zugeordnet, daher ist sie außerhalb der Funktionserklärung unsichtbar, kann jedoch in der Balkenfunktion immer noch aufgerufen werden. Dies liegt daran, dass der Mechanismus von JavaScript für die Benennung von Funktionen im Bereich der Funktion immer gültig ist.