Umfang hat in jeder Programmiersprache immer oberste Priorität, da er den Sichtbarkeit und den Lebenszyklus von Variablen und Parametern kontrolliert. Apropos, verstehen Sie zunächst zwei Konzepte: Umfang und Funktionsumfang auf Blockebene.
Was ist ein Umfang auf Blockebene?
Die in einem Paar lockigen Klammern ({und}) festgelegten Anweisung gehört zu einem Block, und alle darin definierten Variablen sind außerhalb des Codeblocks unsichtbar, den wir als Umfang auf Blockebene bezeichnen.
Der Umfang der Funktion ist leicht zu verstehen (*^__^*), und Parameter und Variablen, die in der Funktion definiert sind, sind außerhalb der Funktion unsichtbar.
Die meisten Sprachen der C-Klasse haben Blockebene, aber JS nicht. Bitte beachten Sie die Demo unten:
// c Sprache#include <Stdio.h> void main () {int i = 2; ich--; if (i) {int j = 3; } printf ("%d/n", j); }Beim Ausführen dieses Codes wird ein Fehler "Verwenden einer undefinierten Variablen: J" angezeigt. Wie Sie sehen können, hat die C-Sprache einen Bereich auf Blockebene, da J im Anweisungsblock von if definiert ist, sodass sie außerhalb des Blocks unzugänglich ist.
Und wie tritt JS auf, schauen wir uns eine andere Demo an:
Functin test () {für (var i = 0; i <3; i ++) {} alert (i); } prüfen();Führen Sie diesen Code aus und "3" taucht auf. Es ist ersichtlich, dass außerhalb des Blocks die Variable, die ich im Block definiert habe, immer noch zugänglich ist. Das heißt, JS unterstützt keine Bereiche auf Blockebene, es unterstützt nur Funktionsbereiche und Variablen, die in einer Funktion überall in dieser Funktion definiert sind.
Wie lassen wir Js einen Block-Ebene-Bereich haben? Erinnern Sie sich noch daran, dass die Variable zerstört wird, wenn die in einer Funktion definierte Variable aufgerufen wird? Können wir diese Funktion verwenden, um den Umfang der Blockebene von JS zu simulieren? Schauen Sie sich die folgende Demo an:
Funktion test () {(function () {for (var i = 0; i <4; i ++) {}}) (); Alarm (i); } prüfen();Führen Sie es zu diesem Zeitpunkt erneut aus, ein undefinierter Fehler von "I" wird auftauchen. Haha, es ist hier implementiert. Wenn der Funktionsaufruf abgeschlossen ist, wird die Variable, die ich automatisch zerstört wird, sodass nicht außerhalb des Blocks darauf zugreifen können.
Das Verschlussmerkmal von JS ist das wichtigste Merkmal ((*^__^*), der jeder versteht). In JS sollten wir versuchen, um Konflikte zu verhindern, sollten wir versuchen, globale Variablen und globale Funktionen zu vermeiden. Wie kann man es also vermeiden? Ok, wie in der obigen Demo gezeigt, können wir alles, was wir definieren wollen
(function () {// content}) ();Ist es zu diesem Zeitpunkt zu diesem Zeitpunkt gleichwertig, der Außenschicht einen Funktionsbereich hinzuzufügen? Programme außerhalb dieses Umfangs können nicht auf sie zugreifen.