In diesem Tutorial lernen Sie anhand von Beispielen, wie JavaScript geschlossen wird.
Bevor Sie sich mit Verschlüssen vertraut machen, müssen Sie zwei Konzepte verstehen:
- Verschachtelte Funktion
- Rückgabe einer Funktion
Verschachtelte JavaScript-Funktion
In JavaScript kann eine Funktion auch eine andere Funktion enthalten. Dies wird als verschachtelte Funktion bezeichnet. Beispielsweise,
// nested function example // outer function function greet(name) ( // inner function function displayName() ( console.log('Hi' + ' ' + name); ) // calling inner function displayName(); ) // calling outer function greet('John'); // Hi John
Im obigen Programm greet()
enthält die displayName()
Funktion die darin enthaltene Funktion.
Rückgabe einer Funktion
In JavaScript können Sie auch eine Funktion innerhalb einer Funktion zurückgeben. Beispielsweise,
function greet(name) ( function displayName() ( console.log('Hi' + ' ' + name); ) // returning a function return displayName; ) const g1 = greet('John'); console.log(g1); // returns the function definition g1(); // calling the function
Ausgabe
Funktion displayName () (console.log ('Hi' + '' + Name);) Hi John
Im obigen Programm gibt die greet()
Funktion die displayName
Funktionsdefinition zurück.
Hier wird die zurückgegebene Funktionsdefinition der Variablen g1 zugewiesen. Wenn Sie g1 mit drucken console.log(g1)
, erhalten Sie die Funktionsdefinition.
Um die in der Variablen g1 gespeicherte Funktion aufzurufen, verwenden wir g1()
Klammern.
JavaScript-Verschlüsse
In JavaScript ermöglicht das Schließen den Zugriff auf den äußeren Bereich einer Funktion von innerhalb der inneren Funktion, auch nachdem die äußere Funktion geschlossen wurde. Beispielsweise,
// javascript closure example // outer function function greet() ( // variable defined outside the inner function let name = 'John'; // inner function function displayName() ( // accessing name variable return 'Hi' + ' ' + name; ) return displayName; ) const g1 = greet(); console.log(g1); // returns the function definition console.log(g1()); // returns the value
Ausgabe
Funktion displayName () (// Zugriff auf Name Variable Rückgabe 'Hi' + '' + Name;) Hi John
Wenn im obigen Beispiel eine greet()
Funktion aufgerufen wird, wird die Funktionsdefinition von zurückgegeben displayName
.
Hier g1
ist ein Verweis auf die displayName()
Funktion.
Wenn g1()
es aufgerufen wird, hat es weiterhin Zugriff auf die greet()
Funktion.
Wenn wir ausführen console.log(g1)
, wird die Funktionsdefinition zurückgegeben.
Das Konzept der Schließung existiert für andere Programmiersprachen wie Python, Swift, Ruby usw.
Schauen wir uns ein anderes Beispiel an.
// closure example function calculate(x) ( function multiply(y) ( return x * y; ) return multiply; ) const multiply3 = calculate(3); const multiply4 = calculate(4); console.log(multiply3); // returns calculate function definition console.log(multiply3()); // NaN console.log(multiply3(6)); // 18 console.log(multiply4(2)); // 8
Im obigen Programm nimmt die calculate()
Funktion ein einzelnes Argument x
und gibt die Funktionsdefinition der multiply()
Funktion zurück. Die multiply()
Funktion nimmt ein einzelnes Argument y
und gibt zurück x * y
.
Beides multiply3
und multiply4
sind Verschlüsse.
Die calculate()
Funktion wird als Übergabe eines Parameters bezeichnet x
. Wenn multiply3
und multiply4
aufgerufen werden, hat die multipy()
Funktion Zugriff auf das übergebene x-Argument der äußeren calculate()
Funktion.
Datenprivatsphäre
Das Schließen von JavaScript hilft beim Datenschutz des Programms. Beispielsweise,
let a = 0; function sum() ( function increaseSum() ( // the value of a is increased by 1 return a = a + 1; ) return increaseSum; ) const x = sum(); console.log(x()); // 1 console.log(x()); // 2 console.log(x()); // 3 a = a + 1; console.log(a); // 4
Im obigen Beispiel gibt die sum()
Funktion die Funktionsdefinition der increaseSum()
Funktion zurück.
Die Variable a wird innerhalb der increaseSum()
Funktion erhöht . Der Wert der Variablen a kann jedoch auch außerhalb der Funktion geändert werden. In diesem Fall wird a = a + 1;
der Wert der Variablen außerhalb der Funktion geändert.
Wenn Sie möchten, dass die Variable a nur innerhalb der Funktion erhöht wird, können Sie einen Abschluss verwenden. Beispielsweise,
function sum() ( let a = 0; function increaseSum() ( // the value of a is increased by 1 return a = a + 1; ) return increaseSum; ) let x = sum(); let a = 5; console.log(x()); // 1 console.log(x()); // 2 console.log(a); // 5
Im obigen Beispiel setzt die sum()
Funktion den Wert von a auf 0 und gibt die increaseSum()
Funktion zurück.
Aufgrund der Schließung hat, obwohl sum()
bereits ausgeführt, increaseSum()
immer noch Zugriff auf a und kann bei jedem Aufruf 1 zu a hinzufügen x()
.
Und die Variable a ist für die sum()
Funktion privat . Dies bedeutet, dass auf die Variable a nur innerhalb der sum()
Funktion zugegriffen werden kann.
Selbst wenn Sie es deklarieren a
und verwenden, wirkt es sich nicht auf die a
Variable innerhalb der sum()
Funktion aus.
Hinweis : Im Allgemeinen werden Schließungen aus Datenschutzgründen verwendet.