VorwortLassen Sie uns zu Beginn des Artikels einige Konzepte lernen:
Statischer Umfang vs. dynamischer UmfangJavaScript verwendet einen statischen Bereich und der Speicherort der Funktionsdefinition bestimmt den Bereich der Funktion. Sehen wir uns ein Beispiel an, um den Unterschied zwischen statischem und dynamischem Umfang zu verstehen. var Wert = 1; Funktion test() { konsole.log(Wert); } Funktion bar() { var Wert = 2; prüfen(); } Bar(); // sich herausstellen? ? ? Im obigen Code:
Ausführungsprozess mit statischem UmfangÜberprüfen Sie beim Ausführen der Testfunktion zunächst, ob die Variable val innerhalb der Testfunktion vorhanden ist. Wenn nicht, suchen Sie an der Stelle, an der die Funktion definiert ist, im Code der vorherigen Ebene und finden Sie die globale Variable val, deren Wert 1 ist. Die Bereichssuche beginnt zur Laufzeit immer im innersten Bereich und bewegt sich nach außen, bis der erste übereinstimmende Bezeichner gefunden wird. Unabhängig davon, wo oder wie eine Funktion aufgerufen wird, wird ihr Gültigkeitsbereich nur dadurch bestimmt, wo die Funktion definiert ist. Dynamischer BereichsausführungsprozessWenn die Testfunktion ausgeführt wird, wird die Variable val zuerst innerhalb der Funktion gesucht. Wenn sie nicht gefunden wird, wird die Variable val im Gültigkeitsbereich der aufrufenden Funktion gesucht, d. h. im Gültigkeitsbereich der Bar-Funktion. Daher ist das Druckergebnis 2. ÜbungSehen wir uns drei Übungen an, um den statischen Umfang zu erfassen und zu verstehen: Der Umfang wird dadurch bestimmt, wo die Funktion definiert ist. Übung 1var a = 1 Funktion fn1(){ Funktion fn3(){ var a = 4 fn2() } var a = 2 Rückkehr Fn3 } Funktion fn2(){ konsole.log(a) } var fn = fn1() fn() Im obigen Code:
Bevor Sie die Fragen beantworten, müssen Sie das Konzept des statischen Umfangs verstehen. In dieser Frage wird fn2 global definiert. Wenn die Variable a in fn2 nicht gefunden werden kann, wird global gesucht, was nichts mit fn1 und fn3 zu tun hat, und 1 ausgegeben. Übung 2var a = 1 Funktion fn1(){ Funktion fn2(){ konsole.log(a) } Funktion fn3(){ var a = 4 fn2() } var a = 2 Rückkehr Fn3 } var fn = fn1() fn() fn2 ist innerhalb der Funktion fn1 definiert. Wenn also keine Variable a innerhalb von fn2 vorhanden ist, wird sie in fn1 gesucht, was nichts mit der Funktion fn3 zu tun hat. Wenn sie in fn1 nicht gefunden werden kann, wird sie auf der vorherigen Ebene (global) gesucht, auf der fn1 definiert ist, bis der erste passende Bezeichner gefunden wird. In dieser Frage können Sie die Variable a in fn1 finden und 2 drucken Übung 3var a = 1; Funktion fn1(){ Funktion fn3(){ Funktion fn2(){ konsole.log(a) } var a; fn2() ein = 4 } var a = 2 Rückkehr Fn3 } var fn = fn1() fn() In dieser Frage ist fn2 in Funktion fn3 definiert. Wenn Variable a in fn2 nicht gefunden werden kann, wird zuerst in fn3 gesucht. Wenn sie immer noch nicht gefunden werden kann, wird in fn1 gesucht. In dieser Frage ist die Variable a in fn3 zu finden, da a jedoch bei der Ausführung von fn2() kein Wert zugewiesen wird, wird „undefined“ ausgegeben. ZusammenfassenIn Bezug auf den statischen Gültigkeitsbereich von JavaScript müssen wir uns nur einen Satz merken: Der Speicherort der Funktionsdefinition bestimmt den Gültigkeitsbereich der Funktion. Lassen Sie sich bei Fragen nicht von anderen Codes stören. Dies ist das Ende dieses Artikels über den statischen und dynamischen Umfang von JavaScript. Weitere relevante Inhalte zum statischen und dynamischen Umfang von JS finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Wo wird der von IntelliJ IDEA mit Tomcat bereitgestellte Projektspeicherort verwendet?
>>: So fügen Sie einer großen MySQL-Tabelle eine Spalte hinzu
Das MySQL auf einem Server im Computerraum lief e...
Die Festlegung einer Begrenzung der Anzahl von Be...
Vorwort: Zeitstempelfelder werden häufig in MySQL...
Erst Code, dann Text Code kopieren Der Code lautet...
Die Rich-Text-Komponente ist eine sehr häufig ver...
Ideen Eigentlich ist es ganz einfach Schreiben Si...
Inhaltsverzeichnis Dokumentobjektmodell (DOM) DOM...
In diesem Artikel finden Sie das Installations-Tu...
Derzeit haben die Verantwortlichen von Layui die ...
In diesem Artikel wird die Installations- und Kon...
Kaufzertifikat Sie können es beim Cloud Shield Ce...
Bitte öffnen Sie die Testseite in einem gängigen ...
In diesem Artikelbeispiel wird der spezifische Co...
MySQL ist heute die Datenbank, die von den meiste...
Im Vue-Gerüst können wir sehen, dass im neuen Vue...