
const secureBooking = function(){
let passengerCount = 0;
return function(){
passengerCount++;
console.log(`${passengerCount} passengers`);
}
}
const booker = secureBooking();
booker();
booker();
booker();
Defn: Ein Abschluss ist eine geschlossene variable Umgebung des EC, in der ein Fn erstellt wurde, auch nachdem dieser EC verschwunden ist.
Außerdem gewährt ein Abschluss einem Fn Zugriff auf alle Variablen seines übergeordneten Fns, selbst nachdem dieser übergeordnete Fn zurückgekehrt ist. Der fn behält einen Verweis auf seinen äußeren Bereich bei, wodurch die Bereichskette über die Zeit hinweg erhalten bleibt.
Eine Schließung stellt sicher, dass der Fn die Verbindung zu Variablen, die zum Zeitpunkt der Geburt von Fn existierten, nicht verliert. Es ist wie ein Rucksack, den ein Fn überall hin mitnimmt. Dieser Rucksack enthält alle Variablen, die in der Umgebung vorhanden waren, in der der FN erstellt wurde.
Wir müssen Abschlüsse nicht manuell erstellen. Außerdem können wir nicht einmal explizit auf geschlossene Variablen zugreifen. Ein Abschluss ist kein greifbares JS-Objekt, d. h. wir können nicht auf einen Abschluss zugreifen und daraus Variablen übernehmen. Es ist eine interne Eigenschaft eines Fn. Um einen Blick auf den Rucksack zu werfen, „console.dir(booker);“
[[Scope]] zeigt Ihnen den VE dieses Fn-Aufrufs.
[[]] bedeutet, dass es sich um eine interne Eigenschaft handelt, auf die wir über unseren Code nicht zugreifen können.
Wir müssen nicht immer einen FN von einem anderen FN zurückgeben, um einen Abschluss zu erstellen. Im folgenden Beispiel wurde die Variable „f“ nicht einmal innerhalb von fn definiert, da sie sich im globalen Bereich befindet. Es kann auch dann auf die Variable „a“ zugreifen, wenn g() seinen EC beendet hat. „a“ befindet sich jetzt im Rucksack von „f“.
let f;
const g = function(){
const a = 23;
f = function() {
console.log(a*2); // 46
};
};
const h = function(){
const b = 777;
f = function(){
console.log(b*2); // 1554
};
};
g();
f();
console.dir(f);
// f fn is reassigned using h fn. Hence, old closure value i.e 'a' will be replaced with new value 'b' which can be verified using console.dir().
h();
f();
console.dir(f);
// Boarding Passengers using Closures
const boardPassengers = function(n, wait){
const perGroup = n / 3;
setTimeout(function(){
console.log(`We are now boarding all ${n} passengers`);
console.log(`There are 3 groups, each with ${perGroup} passengers`)
}, wait*1000);
console.log(`Will start boarding in ${wait} seconds`);
}
boardPassengers(180, 3);
Das obige ist der detaillierte Inhalt vonAbschlüsse in JS entmystifizieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
So kommentieren Sie Code in HTML
Hauptzweck des Dateisystems
Lösung für unzureichenden Speicher des Cloud-Host-Servers
Was sind die Operatoren in der Go-Sprache?
Regulärer Ausdruck enthält nicht
Ein Speicher, der Informationen direkt mit der CPU austauschen kann, ist ein
Lösung für die Meldung „Ungültige Partitionstabelle' beim Start von Windows 10
Detaillierte Erklärung des Befehls imp in Oracle