Der Gültigkeitsbereich ist in jeder Programmiersprache immer das Wichtigste, da er die Sichtbarkeit und den Lebenszyklus von Variablen und Parametern steuert. Apropos: Verstehen Sie zunächst zwei Konzepte: den Umfang auf Blockebene und den Funktionsumfang.
Was ist der Umfang auf Blockebene?
Jeder Satz von Anweisungen innerhalb eines geschweiften Klammerpaares ({ und }) gehört zu einem Block, und alle darin definierten Variablen sind außerhalb des Codeblocks unsichtbar. Wir nennen es Blockebenenbereich.
Der Funktionsumfang ist leicht zu verstehen (*^__^*). Die in der Funktion definierten Parameter und Variablen sind außerhalb der Funktion nicht sichtbar.
Die meisten C-ähnlichen Sprachen haben einen Gültigkeitsbereich auf Blockebene, JS jedoch nicht. Bitte sehen Sie sich die Demo unten an:
//C语言 #include <stdio.h> void main() { int i=2; i--; if(i) { int j=3; } printf("%d/n",j); }
Wenn Sie diesen Code ausführen, wird die Fehlermeldung „Verwenden Sie eine undefinierte Variable:j“ angezeigt. Wie Sie sehen, hat die Sprache C einen Gültigkeitsbereich auf Blockebene, da j im if-Anweisungsblock definiert ist und daher außerhalb des Blocks nicht darauf zugegriffen werden kann.
Wie verhält sich JS? Schauen wir uns eine weitere Demo an:
functin test(){ for(var i=0;i<3;i++){ } alert(i); } test();
Führen Sie diesen Code aus und „3“ wird angezeigt. Es ist ersichtlich, dass außerhalb des Blocks weiterhin auf die Variable zugegriffen werden kann, die ich im Block definiert habe. Mit anderen Worten: JS unterstützt keinen Gültigkeitsbereich auf Blockebene, sondern nur den Funktionsbereich und Variablen, die an einer beliebigen Stelle in einer Funktion definiert sind, sind überall in der Funktion sichtbar.
Wie sorgen wir also dafür, dass JS einen Geltungsbereich auf Blockebene hat? Erinnern Sie sich noch daran, dass in einer Funktion definierte Variablen zerstört werden, wenn die Funktion aufgerufen wird? Können wir diese Funktion verwenden, um den Umfang von JS auf Blockebene zu simulieren? Schauen Sie sich die DEMO unten an:
function test(){ (function (){ for(var i=0;i<4;i++){ } })(); alert(i); } test();
Wenn Sie es zu diesem Zeitpunkt erneut ausführen, wird ein undefinierter Fehler „i“ angezeigt. Haha, er wurde implementiert. Hier fügen wir den for-Anweisungsblock in einen Abschluss ein und rufen diese Funktion dann auf Wenn der Funktionsaufruf abgeschlossen ist, wird die Variable i automatisch zerstört, sodass wir außerhalb des Blocks nicht darauf zugreifen können.
Die Abschlussfunktion von JS ist die wichtigste Funktion ((*^__^*) jeder kennt). Um Namenskonflikte zu vermeiden, sollten wir in JS versuchen, die Verwendung globaler Variablen und globaler Funktionen zu vermeiden. Wie kann man es also vermeiden? Ja, wie in der Demo oben gezeigt, können wir alles, was wir definieren möchten, in ein
einfügen(function (){ //内容 })();
Sind wir zu diesem Zeitpunkt gleichbedeutend mit dem Hinzufügen eines Funktionsumfangs zu ihrer äußeren Schicht? Programme außerhalb dieses Bereichs können nicht darauf zugreifen.