ECMAScript closure
- Pagina precedente Oggetto Function
- Pagina successiva Orientato agli oggetti
Uno dei punti più ingannevoli dell'ECMAScript è che supporta i closure (chiusure).
La closure, che indica la rappresentazione lessicale di una funzione che include variabili non calcolate, ovvero, la funzione può utilizzare variabili definite al di fuori della funzione.
Esempio di closure semplice
L'uso delle variabili globali in ECMAScript è un esempio semplice di closure.
var sMessage = "hello world"; function sayHelloWorld() { alert(sMessage); } sayHelloWorld();
In questo pezzo di codice, dopo che lo script è stato caricato in memoria, non viene calcolato il valore della variabile sMessage per la funzione sayHelloWorld(). La funzione cattura il valore di sMessage solo per utilizzo futuro, ovvero, l'interprete sa che deve controllare il valore di sMessage quando viene chiamata la funzione sayHelloWorld() (ultima riga). sMessage viene assegnato durante la chiamata alla funzione sayHelloWorld() (ultima riga) e mostra il messaggio "hello world".
Esempio di closure complessa
Definire un'altra funzione all'interno di una funzione rende le closure più complesse. Ad esempio:
var iBaseNum = 10; function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd(); }
In questo caso, la funzione addNum() include la funzione doAdd() (closure). L'interna funzione è una closure perché cattura i parametri iNum1 e iNum2 della funzione esterna e il valore della variabile globale iBaseNum. L'ultimo passo di addNum() chiama doAdd(), aggiunge i due parametri e la variabile globale, e restituisce la somma.
Il concetto importante da capire qui è che la funzione doAdd() non accetta parametri in modo assoluto, ma utilizza i valori ottenuti dall'ambiente di esecuzione.
Si può vedere che le closure sono una parte molto potente e versatile di ECMAScript, utilizzabili per eseguire calcoli complessi.
Suggerimento:Come per qualsiasi funzione avanzata, l'uso di closure deve essere fatto con cautela, poiché possono diventare molto complesse.
- Pagina precedente Oggetto Function
- Pagina successiva Orientato agli oggetti