Der heutige Kurztipp für ein Video ist die Antwort auf eine Frage auf Twitter, die JavaScript zum Thema "Heben" betrifft. Was ist das? Wie funktioniert es? Was musst du darüber wissen? All das wird in dieser Anfänger-Lektion behandelt.
Betrachten Sie den folgenden Code:
var myvar = 'mein Wert'; Alarm (Myvar); // mein Wert
Okay, natürlich zeigt die Warnung „meinen Wert“ an. Das ist offensichtlich; Bleib aber bei mir. Als nächstes erstellen wir eine Sofortfunktion, die denselben Wert anzeigt.
var myvar = 'mein Wert'; (function () alert (myvar); // mein Wert) ();
Gut gut. Immer noch offensichtlich, ich weiß. Lassen Sie uns nun einen Schlüssel in die Mischung werfen und innerhalb dieser anonymen Funktion mit demselben Namen eine lokale Variable erstellen.
var myvar = 'mein Wert'; (function () alert (myvar); // undefined var myvar = 'local value';) ();
Huh Warum wird die Warnung jetzt angezeigt? nicht definiert
? Obwohl wir haben erklärt eine neue Variable, die immer noch unter der Warnung liegt; also sollte es keine Wirkung haben, richtig? Falsch.
Innerhalb des aktuellen Geltungsbereichs, unabhängig davon, wo eine Variable deklariert ist, wird sie hinter den Kulissen nach oben gehoben. Allerdings nur die Erklärung
wird gehisst. Wenn die Variable auch ist initialisiert
, Der aktuelle Wert oben im Gültigkeitsbereich wird anfänglich auf festgelegt nicht definiert
.
Okay, lassen Sie uns den Unterschied zwischen den Begriffen entschlüsseln, Erklärung
und Initialisierung
. Nehmen Sie die folgende Zeile an: var joe = "Klempner";
Var Joe; // die Erklärung
Joe = "Klempner"; // die Initialisierung
Nun, da wir die Terminologie verstehen, können wir leichter verstehen, was unter der Haube passiert. Betrachten Sie die folgende Scheinfunktion.
(function () var a = 'a'; // Codezeilen var b = 'b'; // Weitere Codezeilen var c = 'c'; // antipattern // letzte Zeilen des Skripts) () ;
Deklarieren Sie alle Variablen oben.
Beachten Sie, dass das, was oben veranschaulicht wurde, als schlechte Praxis betrachtet wird. Hinter den Kulissen werden jedoch alle diese Variablendeklarationen - unabhängig davon, wo sie im Funktionsumfang vorkommen - wie folgt nach oben gehoben:
(function () var a, b, c; // deklarierte Variablen a = 'a'; // Codezeilen b = 'b'; // initialisiert // weitere Codezeilen c = 'c'; // // letzte Zeilen des Skripts initialisiert) ();
Wenn wir jetzt zum ursprünglichen verwirrend zurückkehren nicht definiert
Code-Stück von oben:
var myvar = 'mein Wert'; (function () alert (myvar); // undefined var myvar = 'local value';) ();
Es sollte jetzt vollkommen sinnvoll sein, warum myvar
ist alarmierend nicht definiert.
Wie wir gelernt haben, sobald die lokale Variable, myvar
, wurde erklärt, es wurde automatisch an den oberen Rand des Funktionsumfangs angehoben… über der Warnung. Daher wurde die Variable zum Zeitpunkt der Warnung bereits deklariert. Da jedoch die Initialisierungen nicht ebenfalls angehoben werden, lautet der Wert der Variablen: nicht definiert
.