javascript-Bereich von Funktionsdeklarationen
Den var
- Schlüsselwort in javascript bewirkt, dass eine variable gespeichert, die im lokalen Bereich. Ohne var
Variablen gehören zu den globalen Bereich. Was ist mit Funktionen? Es ist klar, was passiert, wenn Funktionen deklariert werden wie Variablen
var foo = function() {...}
aber welche Möglichkeiten hat
function foo() {...}
gehören?
BEARBEITEN:
Ich merkte, ich hatte nicht zu Fragen, genau die richtige Frage, so als follow-up. In der äußeren Verschachtelung gibt es einen Unterschied zwischen den beiden oben genannten Erklärungen und der folgenden Erklärung?
foo = function() {...}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gehört es zu den aktuellen Umfang, immer. Zum Beispiel:
Bezüglich deiner zweiten Frage, diese:
ist eine anonyme Funktion, Ausdruck einer globalen Variablen zugewiesen (es sei denn, du betreibst ist "strict-Modus", dann
foo
wäre nicht definiert). Der Unterschied zwischen diesem undfunction foo() {}
ist, dass die letztere ist eine Funktion Erklärung (im Gegensatz zu einer variable Erklärung, die dem zugeordnet ist eine anonyme Funktion Ausdruck).Euch von Interesse sein könnte in diesem ausgezeichneten Artikel über die Funktions-Deklarationen und die Funktion Ausdrücken: Named function expressions demystified.
Funktion Erklärungen sind immer vor Ort, um den aktuellen Bereich, wie eine variable deklariert mit dem
var
Stichwort.Aber der Unterschied ist, dass, wenn Sie erklärt (statt einer Variablen zugewiesen) Ihre definition ist gehisst, so dass Sie verwendet werden können überall in den Rahmen, auch wenn die Erklärung kommt am Ende des Codes. Siehe auch var Funktionsname = function() {} vs Funktion functionName() {}.
Bemerkenswerte Unterscheidung der Einnahme von impliziten Annahmen zu berücksichtigen:
Hoffentlich, das klärt ein wenig. Implizite Annahmen definiert, wenn Sie vergessen, eine
var
vor Ihrer Abtretung an. Seine eine gefährliche Gefahr, die gilt für Deklarationen von Variablen und funktionalen Ausdrücke.Deinem ersten Beispiel (
var foo = function() {...}
) aufgerufen wird eine anonyme Funktion. Es ist dynamisch deklariert zur Laufzeit, und folgt nicht den gleichen Regeln wie eine normale Funktion, aber folgt den Regeln der Variablen.