Heim >Web-Frontend >js-Tutorial >Eine eingehende Analyse des Schließmechanismus von JavaScript_Grundkenntnisse
JavaScript-Variablen können lokale Variablen oder globale Variablen sein.
Abschlüsse können für private Variablen verwendet werden.
Globale Variablen
Funktionen können auf Variablen zugreifen, die innerhalb der Funktion definiert sind, wie zum Beispiel:
Beispiel
function myFunction() { var a = 4; return a * a; }
Funktionen können auch auf Variablen zugreifen, die außerhalb der Funktion definiert sind, wie zum Beispiel:
Beispiel
var a = 4; function myFunction() { return a * a; }
Im letzteren Beispiel ist a eine globale Variable.
Globale Variablen in Webseiten gehören zum Fensterobjekt.
Globale Variablen gelten für alle Skripte auf der Seite.
Im ersten Fall ist a eine lokale Variable.
Lokale Variablen können nur innerhalb der Funktion verwendet werden, in der sie definiert sind. Nicht verfügbar für andere Funktionen oder Skriptcode.
Auch wenn globale und lokale Variablen denselben Namen haben, handelt es sich um zwei verschiedene Variablen. Die Änderung eines davon hat keinen Einfluss auf den Wert des anderen.
Hinweis
Wenn eine Variable ohne das Schlüsselwort var deklariert wird, handelt es sich um eine globale Variable, auch wenn sie innerhalb einer Funktion definiert ist.
Variabler Lebenszyklus
Der Geltungsbereich globaler Variablen ist global, dh globale Variablen befinden sich überall im gesamten JavaScript-Programm.
Innerhalb einer Funktion deklarierte Variablen funktionieren nur innerhalb der Funktion. Diese Variablen sind lokale Variablen und ihr Gültigkeitsbereich ist lokal; die Parameter der Funktion sind ebenfalls lokal und funktionieren nur innerhalb der Funktion.
Gegendilemma
Stellen Sie sich vor, Sie möchten einige Werte zählen und der Zähler ist in allen Funktionen verfügbar.
Sie können globale Variablen und Funktionen verwenden, um den Zähler so einzustellen, dass er erhöht wird:
Beispiel
var counter = 0; function add() { counter += 1; } add(); add(); add(); // 计数器现在为 3
Der Zählerwert ändert sich, wenn die Funktion add() ausgeführt wird.
Aber hier liegt das Problem: Jedes Skript auf der Seite kann den Zähler ändern, auch wenn die Funktion add() nicht aufgerufen wird.
Wenn ich einen Zähler innerhalb einer Funktion deklariere, kann der Wert des Zählers nicht geändert werden, ohne die Funktion aufzurufen:
Beispiel
function add() { var counter = 0; counter += 1; } add(); add(); add(); // 本意是想输出 3, 但事与愿违,输出的都是 1 !
Der obige Code wird nicht korrekt ausgegeben. Jedes Mal, wenn ich die Funktion add() aufrufe, wird der Zähler auf 1 gesetzt.
JavaScript-Inline-Funktionen können dieses Problem lösen.
In JavaScript integrierte Funktionen
Alle Funktionen haben Zugriff auf globale Variablen.
Tatsächlich haben in JavaScript alle Funktionen Zugriff auf den darüber liegenden Bereich.
JavaScript unterstützt verschachtelte Funktionen. Verschachtelte Funktionen können auf Funktionsvariablen der oberen Ebene zugreifen.
In diesem Beispiel kann die Inline-Funktion plus() auf die Zählervariable der übergeordneten Funktion zugreifen:
Beispiel
function add() { var counter = 0; function plus() {counter += 1;} plus(); return counter; }
Wenn wir extern auf die Funktion plus() zugreifen könnten, würde dies das Zählerdilemma lösen.
Wir müssen auch sicherstellen, dass counter = 0 nur einmal ausgeführt wird.
Wir brauchen Schließungen.
JavaScript-Schließung
Erinnern Sie sich an die Funktion, die sich selbst aufruft? Was macht diese Funktion?
Beispiel
var add = (function () { var counter = 0; return function () {return counter += 1;} })(); add(); add(); add(); // 计数器为 3
Beispielanalyse
Die Variable add gibt den Rückgabewortwert der aufrufenden Funktion selbst an.
Selbstaufrufende Funktionen werden nur einmal ausgeführt. Zähler auf 0 setzen. und gibt den Funktionsausdruck zurück.
Die Add-Variable kann als Funktion verwendet werden. Das Coole daran ist, dass es den Zugriff auf Zähler aus dem Bereich über der Funktion ermöglicht.
Dies wird als JavaScript-Abschluss bezeichnet. Es ermöglicht Funktionen, private Variablen zu haben.
Der Zähler ist durch den Bereich der anonymen Funktion geschützt und kann nur über die Add-Methode geändert werden.
Hinweis
Ein Abschluss ist eine Funktion, die auf Variablen im Gültigkeitsbereich der vorherigen Funktion zugreifen kann, auch wenn die vorherige Funktion geschlossen wurde.