English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le variabili JavaScript possono appartenereLocaleAmbito oGlobaleAmbito.
Può essere utilizzatoClausolaImpostare la variabile globale come locale (privata).
Supponiamo di voler utilizzare una variabile per contare qualcosa e desideriamo che il contatore sia disponibile per tutte le funzioni.
Possiamo utilizzare una variabile globale e una funzione per aumentare il contatore:
// Inizializzazione del contatore var counter = 0; // Funzione di incrementazione del contatore function increment() { counter++; } // Chiamata a increment() 3 volte increment(); increment(); increment(); // Ora il contatore dovrebbe essere 3 document.getElementById("output").innerHTML = `Contatore: ${counter};`;Testa vedere‹/›
La soluzione proposta ha un problema: qualsiasi codice sulla pagina può modificare il contatore senza chiamare increment().
La funzione interna JavaScript può risolvere questo problema.
JavaScript supporta le funzioni annidate. Le funzioni annidate possono accedere agli ambienti superiori.
In questo esempio, la funzione interna può accedere alla variabile contatore dell'ambiente della funzione esterna:
function outer() { var counter = 0; function inner() { counter++; } return counter; }Testa vedere‹/›
Le funzioni annidate possono risolvere il problema precedente, se possiamo accedere alla funzione inner() dall'esterno.
Dobbiamo trovare un metodo per eseguire una volta counter = 0, che è la chiusura menzionata di seguito.
La chiusura è la combinazione di una funzione e dell'ambiente lessicale che dichiara la funzione.
La chiusura può accedere alle variabili dell'ambito di un'altra funzione. Questo viene realizzato creando una funzione all'interno della funzione. Naturalmente, la funzione esterna non può accedere all'ambito interno.
var increment = (function() { var counter = 0; function inner() { return ++counter; } return inner; })();Testa vedere‹/›
Il valore di ritorno della funzione di esecuzione automatica viene assegnato all'aumento dell'incremento della variabile.
La funzione di esecuzione automatica viene eseguita una volta. Imposta il contatore a zero e restituisce l'espressione della funzione.
La chiusura della funzione è in grado di accedere all'ambito genitore anche se la funzione genitore è stata chiusa.