Chiudi JavaScript
- Pagina precedente Funzione di binding JS
- Pagina successiva Introduzione alle classi JS
Le variabili JavaScript appartengono aLocale
LocaleGlobale
O
Contesto.Chiusura
Le variabili globali possono essere accedute tramite
Può implementare locale (privato).
Variabile globaleLa funzione può accedere a variabili definiteInterna
Esempio
function myFunction() { var a = 4; return a * a; }
Ma la funzione può anche accedere a variabili definiteEsternaVariabili definite, come:
Esempio
var a = 4; function myFunction() { return a * a; }
Nell'ultimo esempio:a
èGlobaleVariabile.
Nella pagina web, le variabili globali appartengono all'oggetto window.
Le variabili globali possono essere usate e modificate da tutti gli script nella pagina (e nella finestra).
Nel primo esempio:a
èLocaleVariabile.
Le variabili locali possono essere usate solo all'interno della funzione in cui sono definite. Per altre funzioni e script sono invisibili.
Le variabili globali e locali con lo stesso nome sono variabili diverse. Modificare una non cambia l'altra.
nonparola chiave var
Le variabili create sono sempre globali, anche se create all'interno di una funzione.
La vita delle variabili
Le variabili globali vivono quanto la tua applicazione (finestra, pagina web).
Le variabili locali non vivono a lungo. Vengono create durante la chiamata della funzione e eliminate alla fine della funzione.
Un dilemma del contatore
Supponiamo che tu voglia usare una variabile per contare e che tu voglia che questo contatore sia disponibile per tutte le funzioni.
Puoi usare variabili globali e funzioni per incrementare il contatore:
Esempio
// Inizializzazione del contatore var counter = 0; // Funzione di incrementazione del contatore function add() { counter += 1; } // Chiamare add() tre volte add(); add(); add(); // A questo punto il contatore dovrebbe essere 3
Questa soluzione ha un problema: qualsiasi codice sulla pagina può modificare il contatore senza chiamare add().
Per la funzione add(), il contatore dovrebbe essere locale per prevenire che altri codici lo cambino:
Esempio
// Inizializzazione del contatore var counter = 0; // Funzione di incrementazione del contatore function add() { var counter = 0; counter += 1; } // Chiamare add() tre volte add(); add(); add(); // A questo punto il contatore dovrebbe essere 3. Ma è 0.
Non è utile perché mostriamo il contatore globale invece del contatore locale.
Rendendo la funzione restituisca se stessa, possiamo eliminare il contatore globale e accedere al contatore locale:
Esempio
// Funzione di incrementazione del contatore function add() { var counter = 0; counter += 1; return counter; } // Chiamare add() tre volte add(); add(); add(); // A questo punto il contatore dovrebbe essere 3. Ma è 1.
Non è utile perché ogni volta che chiamiamo una funzione resettiamo il contatore locale.
Le funzioni interne JavaScript possono risolvere questo problema.
Funzioni annidate JavaScript
Tutte le funzioni hanno il diritto di accedere al contesto globale.
Infatti, in JavaScript, tutte le funzioni hanno il diritto di accedere al loro contesto superiore.
JavaScript supporta le funzioni annidate. Le funzioni annidate possono accedere al loro contesto superiore.
In questo esempio, la funzione interna plus()
può accedere a variabili di funzione superiori counter
Variabile contatore:
Esempio
function add() { var counter = 0; function plus() {counter += 1;} plus(); return counter; }
Così possiamo risolvere il problema del contatore, se possiamo accedere dall'esterno plus()
funzione.
Abbiamo bisogno di trovare una funzione che venga eseguita una volta sola counter = 0
metodo.
Abbiamo bisogno di una chiusura (closure).
Chiudi JavaScript
Ricordi la funzione autoeseguita? Cosa farà questa funzione?
Esempio
var add = (function () { var counter = 0; return function () {return counter += 1;} })(); add(); add(); add(); // Il contatore è attualmente 3
Esempio di spiegazione
variabile add
l'assegnazione è il valore di ritorno della funzione autoeseguita.
Questa funzione autoeseguita viene eseguita una volta sola. Imposta il contatore a zero (0) e restituisce l'espressione di funzione.
Così add diventa una funzione. La “parte più interessante” è che può accedere al contatore dell'ambito padre.
Questo si chiama JavaScript Chiusura. Questo permette alla funzione di avere “PrivatoIl variabile diventa possibile.
Il contatore è protetto dall'ambito di questa funzione anonima e può essere modificato solo tramite la funzione add.
La chiusura (closure) è una funzione che ha accesso all'ambito del padre, anche dopo la chiusura della funzione padre.
- Pagina precedente Funzione di binding JS
- Pagina successiva Introduzione alle classi JS