Obwohl Abschlüsse eine grundlegende Idee in JavaScript sind, können Neulinge sie vage und schwer zu verstehen finden. Insbesondere die Definition des ECMA-Standards kann ohne praktische Erfahrung schwer zu verstehen sein. Daher gehen wir in diesem Beitrag nicht ausführlich auf die Erläuterung des Begriffs „Closures“ ein, sondern machen es Ihnen durch die Verwendung von tatsächlichem Code verständlicher.
function A(name){ function B(){ console.log(name); } return B; } var C = A("Closure"); C();//Closure
Dies ist der einfachste Verschluss.
Da wir nun die Grundlagen kennen, wollen wir kurz untersuchen, wie sich diese von einer typischen Funktion unterscheidet. So sieht der oben genannte Code aus, wenn er in natürliche Sprache übersetzt wird:
Eine Anweisung kann diese fünf Operationen zusammenfassen:
Funktion B innerhalb von Funktion A und Variablenname werden von Variable C außerhalb von Funktion A referenziert.
Mit einer kleinen Modifikation definiert diese Anweisung einen Abschluss wie folgt:
Wenn eine innere Funktion durch eine Variable außerhalb der äußeren Funktion referenziert wird, wird ein Abschluss gebildet.
Daher definiert die Durchführung der oben genannten fünf Vorgänge einen Abschluss.
Bevor wir die Verwendung von Abschlüssen verstehen, wollen wir uns mit dem GC-Mechanismus (Garbage Collection) von JavaScript befassen.
Wenn in JavaScript ein Objekt nicht mehr referenziert wird, wird es vom GC zurückgefordert, andernfalls bleibt es weiterhin im Speicher.
Im obigen Beispiel hängt B von A ab, da B innerhalb von A definiert ist, und A wird indirekt von C referenziert, da die externe Variable C auf B verweist.
Das heißt, A wird nicht vom GC erfasst und bleibt weiterhin im Speicher. Um diese Argumentation zu beweisen, verbessern wir das obige Beispiel leicht.
function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var C = A(); C();// 1 C();// 2 C();// 3
Warum wird die Zählung nicht zurückgesetzt?
Verschlussmechanismus:
Wenn Sie also einige Variablen in einem Modul definieren und diese Variablen im Speicher behalten, aber die globalen Variablen nicht „verschmutzen“ möchten, können Sie dieses Modul mithilfe von Abschlüssen definieren.
Das obige ist der detaillierte Inhalt von[JavaScript] Abschlüsse in Sekundenschnelle verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!