JavaScript Closure
- Vorige Pagina JS Functie Binden
- Volgende Pagina JS Classen Overzicht
JavaScript variabelen behoren totLokaal
OfGlobaal
Scope.
Globale variabelen kunnen toegankelijk zijn viaClosure
Implementeren lokaal (privé).
Globale variabelen
Functies kunnen toegang krijgen tot functiesInterneGedefinieerde variabelen, zoals:
Voorbeeld
function myFunction() { var a = 4; return a * a; }
Maar een functie kan ook functiesExterneGedefinieerde variabelen, zoals:
Voorbeeld
var a = 4; function myFunction() { return a * a; }
In de laatste voorbeeld:a
isGlobaalVariabelen.
In een webpagina behoren globale variabelen tot het window-object.
Globale variabelen kunnen worden gebruikt en gewijzigd door alle scripts op de pagina (en het venster).
In de eerste voorbeeld:a
isLokaalVariabelen.
Lokale variabelen kunnen alleen worden gebruikt binnen de functie waarin ze zijn gedefinieerd. Ze zijn onzichtbaar voor andere functies en scriptcode.
Hebben dezelfde naam als globale en lokale variabelen zijn verschillende variabelen. Het wijzigen van één, verandert de andere niet.
niet viasleutelwoord var
Gecreëerde variabelen zijn altijd globaal, zelfs als ze in een functie worden gecreëerd.
Levensduur van variabelen
Globale variabelen leven net zo lang als uw applicatie (venster, webpagina).
Lokale variabelen leven niet lang. Ze worden gecreëerd bij een functie-aanroep en worden verwijderd wanneer de functie wordt voltooid.
Een probleem met tellers
Stel dat u een variabele wilt gebruiken om te tellen en u wilt dat deze teller toegankelijk is voor alle functies.
U kunt globale variabelen en functies gebruiken om de teller te verhogen:
Voorbeeld
// Initialiseren van de teller var counter = 0; // Functie om de teller te verhogen function add() { counter += 1; } // Roep add() driemaal aan add(); add(); add(); // Op dit moment zou de teller 3 moeten zijn
Het bovenstaande oplossingsvoorstel heeft een probleem: elk code op de pagina kan de teller wijzigen zonder add() aan te roepen.
Voor de add() functie zou de teller lokaal moeten zijn om te voorkomen dat andere code het wijzigt:
Voorbeeld
// Initialiseren van de teller var counter = 0; // Functie om de teller te verhogen function add() { var counter = 0; counter += 1; } // Roep add() driemaal aan add(); add(); add(); // Op dit moment zou de teller 3 moeten zijn. Maar het is 0.
Het is nutteloos, omdat we de globale teller weergeven in plaats van de lokale teller.
Door de functie terug te geven, kunnen we de globale teller verwijderen en toegang krijgen tot de lokale teller:
Voorbeeld
// Functie om de teller te verhogen function add() { var counter = 0; counter += 1; return counter; } // Roep add() driemaal aan add(); add(); add(); // Op dit moment zou de teller 3 moeten zijn. Maar het is 1.
Het is nutteloos, omdat we de lokale teller elke keer opnieuw instellen wanneer we de functie aanroepen.
JavaScript interne functies kunnen dit probleem oplossen.
Geneste functies in JavaScript
Alle functies hebben het recht om toegang te krijgen tot de globale scope.
In feite hebben alle functies in JavaScript het recht om toegang te krijgen tot hun 'bovenliggende' scope.
JavaScript ondersteunt geneste functies. Geneste functies kunnen toegang krijgen tot de hogere scope.
In dit voorbeeld, de interne functie plus()
kan toegang krijgen tot de ouderfunctie van counter
Counter variabele:
Voorbeeld
function add() { var counter = 0; function plus() {counter += 1;} plus(); return counter; }
Op deze manier kunnen we het probleem van de teller oplossen, als we toegang kunnen krijgen van buitenaf plus()
Functie.
We moeten ook een functie vinden die slechts een keer wordt uitgevoerd counter = 0
Methode.
We hebben een closure (closure) nodig.
JavaScript Closure
Herinner je je de zelfoproepende functie? Wat doet deze functie dan?
Voorbeeld
var add = (function () { var counter = 0; return function () {return counter += 1;} })(); add(); add(); add(); // De teller is momenteel 3
Voorbeeld Uitleg
Variabele add
De toewijzing is de retourwaarde van de zelfoproepende functie.
Deze zelfoproepende functie wordt alleen een keer uitgevoerd. Het zet de teller op nul (0) en retourneert de functie-expressie.
Dit maakt add tot een functie. Het ‘meest indrukwekkende’ deel is dat het toegang heeft tot de teller in de ouder scope.
wordt genoemd JavaScript Closure. Het maakt het mogelijk dat een functie een “Privé“Variabelen” worden mogelijk.
De teller wordt beschermd door de scope van deze anonieme functie en kan alleen worden gewijzigd met behulp van de add-functie.
Een closure is een functie die toegang heeft tot de ouder scope, zelfs nadat de vaderfunctie is gesloten.
- Vorige Pagina JS Functie Binden
- Volgende Pagina JS Classen Overzicht