
const secureBooking = function(){ let passengerCount = 0; return function(){ passengerCount++; console.log(`${passengerCount} passengers`); } } const booker = secureBooking(); booker(); booker(); booker();
Defn : Une fermeture est un environnement variable fermé de la CE dans lequel une fn a été créée, même après la disparition de cette CE.
De plus, une fermeture donne à un fn accès à toutes les variables de son fn parent, même après le retour de ce fn parent. Le fn conserve une référence à sa portée externe, ce qui préserve la chaîne de portée au fil du temps.
Une fermeture garantit que le fn ne perd pas la connexion avec les variables qui existaient au moment de la naissance du fn. C'est comme un sac à dos qu'un fn transporte partout où il va. Ce sac à dos contient toutes les variables qui étaient présentes dans l'environnement où le fn a été créé.
Nous n'avons pas besoin de créer des fermetures manuellement. De plus, nous ne pouvons même pas accéder explicitement aux variables fermées. Une fermeture n'est pas un objet JS tangible, c'est-à-dire que nous ne pouvons pas accéder à une fermeture et en extraire des variables. C'est une propriété interne d'un fn. Pour jeter un œil au sac à dos, "console.dir(booker);"
[[Scope]] vous montrera le VE de cet appel fn.
[[]] signifie qu'il s'agit d'une propriété interne à laquelle nous ne pouvons pas accéder à partir de notre code.
Nous n'avons toujours pas besoin de renvoyer un fn à partir d'un autre fn pour créer une fermeture. Dans l'exemple ci-dessous, la variable « f » n'a même pas été définie à l'intérieur du fn, car elle a une portée globale. Il est également capable d'accéder à la variable 'a' même après que g() ait terminé son EC. 'a' est maintenant dans le sac à dos de '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);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
oicq
Comment résoudre l'erreur de requête http 415
Utilisation de la fonction fscanf
Quels plug-ins sont nécessaires pour que vscode exécute du HTML ?
Numéro de téléphone mobile virtuel pour recevoir le code de vérification
Comment résoudre le problème du démarrage lent de l'ordinateur
La différence entre l'hibernation et le sommeil de l'ordinateur
Que signifie le système d'exploitation DOS ?