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
Der vollständige Name von Blog sollte Weblog sein...
HTML besteht aus Tags und Attributen, die zusamme...
Inhaltsverzeichnis Vorwort 1. Gründe: 2. Lösungsi...
Es ist eine sehr häufige Anforderung, die horizon...
Inhaltsverzeichnis 1. Das ursprüngliche Array wir...
Vorwort CSS-Raster sind normalerweise in verschie...
Hintergrund Ehe wir uns versehen, neigt sich ein ...
Vorwort: Wie erhält man die Koordinaten der aktue...
Nginx hat in nur wenigen Jahren den Großteil des ...
Inhaltsverzeichnis 1. MHA 1. Konzept 2. Zusammens...
Die Datei /etc/network/interfaces wird in Linux z...
Vor ein paar Tagen stellte mir ein Kollege eine F...
1. Entpacken Sie MySQL 8.0.16 Der Ordner dada und...
Aus verschiedenen Gründen müssen Sie manchmal den...
Dieser Artikel beschreibt verschiedene Möglichkei...