Heim  >  Artikel  >  Web-Frontend  >  Wie man Abschlüsse in js versteht

Wie man Abschlüsse in js versteht

零到壹度
零到壹度Original
2018-03-31 17:20:461243Durchsuche

Das Schließen ist eine große Schwierigkeit und ein Hauptmerkmal von JavaScript. Viele fortgeschrittene Anwendungen basieren auf Verschlüssen. In diesem Artikel erfahren Sie hauptsächlich, wie Sie Abschlüsse in js verstehen. Freunde, die es brauchen, können einen Blick darauf werfen Um Abschlüsse zu verstehen, müssen Sie zunächst den speziellen Variablenbereich von JavaScript verstehen.
Es gibt nur zwei Bereiche von Variablen: globale Variablen und lokale Variablen.

Das Besondere an der JavaScript-Sprache ist, dass globale Variablen direkt innerhalb der Funktion gelesen werden können, lokale Variablen innerhalb der Funktion jedoch nicht außerhalb der Funktion. Hinweis: Wenn Sie Variablen innerhalb einer Funktion deklarieren, verwenden Sie unbedingt den Befehl var. Wenn Sie es nicht verwenden, deklarieren Sie tatsächlich eine globale Variable!

2. Wie liest man lokale Variablen innerhalb einer Funktion von außen?

Aus verschiedenen Gründen müssen wir manchmal lokale Variablen innerhalb einer Funktion abrufen. Unter normalen Umständen ist dies jedoch, wie oben erwähnt, unmöglich! Dies kann nur durch Workarounds erreicht werden.

Das heißt, eine andere Funktion innerhalb der Funktion zu definieren.

Im obigen Code ist die Funktion f2 in der Funktion f1 enthalten. Zu diesem Zeitpunkt sind alle lokalen Variablen in f1 für f2 sichtbar. Aber das Gegenteil funktioniert nicht. Die lokalen Variablen in f2 sind für f1 unsichtbar.

Dies ist die einzigartige „Kettenbereich“-Struktur der Javascript-Sprache

Das untergeordnete Objekt sucht Ebene für Ebene nach den Variablen aller übergeordneten Objekte. Daher sind alle Variablen des übergeordneten Objekts für das untergeordnete Objekt sichtbar, umgekehrt jedoch nicht.

Da f2 die lokalen Variablen in f1 lesen kann, können wir dann nicht seine internen Variablen außerhalb von f1 lesen, solange f2 als Rückgabewert verwendet wird?
function f1(){
    var n=999;
    function f2(){      alert(n); // 999    }
  }

3. Das Konzept des Abschlusses

Die f2-Funktion im obigen Code ist ein Abschluss.

Die Definitionen von Abschlüssen in der Fachliteratur sind sehr abstrakt. Mein Verständnis ist: Ein Abschluss ist eine Funktion, die die internen Variablen anderer Funktionen lesen kann.

Da in JavaScript nur Unterfunktionen innerhalb einer Funktion lokale Variablen lesen können, kann der Abschluss einfach als „eine innerhalb einer Funktion definierte Funktion“ verstanden werden. Im Wesentlichen ist der Abschluss also eine Brücke, die das Innere einer Funktion mit dem Äußeren der Funktion verbindet.

4. Verwendungsmöglichkeiten von Verschlüssen

Verschlüsse können an vielen Stellen eingesetzt werden. Es hat zwei Hauptverwendungszwecke: Zum einen werden die Variablen innerhalb der Funktion gelesen, zum anderen werden die Werte dieser Variablen im Speicher gehalten und nach dem Aufruf von f1 nicht automatisch gelöscht.

Warum passiert das? Der Grund dafür ist, dass f1 die übergeordnete Funktion von f2 ist und f2 einer globalen Variablen zugewiesen ist, wodurch f2 immer im Speicher bleibt und die Existenz von f2 von f1 abhängt, sodass f1 immer im Speicher ist und nicht gelöscht wird Nach Abschluss des Anrufs wird es vom Garbage-Collection-Mechanismus recycelt.

Eine weitere erwähnenswerte Sache in diesem Code ist die Zeile „nAdd=function(){n+=1}“. Erstens wird das Schlüsselwort var nicht vor nAdd verwendet, daher ist nAdd eher eine globale Variable als lokale Variablen. Zweitens ist der Wert von nAdd eine anonyme Funktion, und diese anonyme Funktion selbst ist auch ein Abschluss, sodass nAdd einem Setter entspricht, der lokale Variablen innerhalb der Funktion außerhalb der Funktion bearbeiten kann.

5. Zu beachtende Punkte bei der Verwendung von Abschlüssen

(1) Da Abschlüsse dazu führen, dass die Variablen in der Funktion im Speicher gespeichert werden, ist der Speicherverbrauch sehr hoch. Daher können Schließungen nicht missbraucht werden, da dies sonst zu Leistungsproblemen auf der Webseite und zu Speicherverlusten im IE führen kann. Die Lösung besteht darin, alle nicht verwendeten lokalen Variablen zu löschen, bevor die Funktion beendet wird.

(2) Der Abschluss ändert den Wert der Variablen innerhalb der übergeordneten Funktion außerhalb der übergeordneten Funktion. Wenn Sie daher die übergeordnete Funktion als Objekt, den Abschluss als öffentliche Methode und die internen Variablen als privaten Wert verwenden, müssen Sie darauf achten, den Wert der Variablen innerhalb der übergeordneten Funktion nicht zu ändern.

Verwandte Empfehlungen:

Javascript-tiefes Verständnis von js-Verschlüssen

Detaillierte Erklärung des JS-Abschlusses

js-Abschlusscode mehrere Beispiele

Das obige ist der detaillierte Inhalt vonWie man Abschlüsse in js versteht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn