Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 30 di 112
  • livello avanzato
Indice lezioni

Callback

Le funzioni JavaScript possono essere passate come parametri di un'altra funzione. La funzione passata come parametro è detta "funzione di callback".
Le funzioni JavaScript possono essere passate come parametri di un'altra funzione. La funzione passata come parametro è detta "funzione di callback".
Link copiato negli appunti

Poiché le funzioni JavaScript sono oggetti di prima classe, possono essere passate come parametri di un'altra funzione. La funzione passata come parametro è detta generalmente funzione di callback o semplicemente callback. Consideriamo il seguente un esempio:

function calcola(func, arg1, arg2) {
	return func(arg1, arg2);
}

La funzione calcola() prevede tre argomenti. Il primo argomento è una funzione di callback che viene invocata sul secondo e terzo argomento. In questo caso il valore restituito dalla funzione è il valore restituito dall'applicazione della funzione di callback sugli altri due argomenti.

Possiamo sfruttare la funzione calcola() per eseguire ad esempio la funzione somma() definita negli esempi precedenti:

console.log(calcola(somma, 13, 25));	// 38

Un aspetto a cui prestare attenzione quando scriviamo funzioni che accettano callback è quello di accertarsi che venga passata effettivamente una funzione prima di invocarla. Il seguente esempio mostra come effettuare tale verifica:

function calcola(func, arg1, arg2) {
	if (func && typeof func === "function") {
		return func(arg1, arg2);
	}
}

La condizione dell'if verifica che l'argomento func sia stato effettivamente passato, cioè che non sia null, e che il suo tipo sia function. Solo se la condizione è vera potrà essere applicata la funzione passata agli altri argomenti.

L'uso di funzioni di callback è molto frequente nella programmazione JavaScript. Ad esse si ricorre ad esempio, nell'esecuzione di alcuni metodi e funzioni predefinite, nelle azioni asincrone come nelle chiamate HTTP o nella gestione di eventi.

Consideriamo ad esempio il metodo forEach() degli array:

var numeri = [11, 3, 24];
numeri.forEach(function(valore, indice) {
	console.log(valore);
});

La funzione passata come parametro al metodo forEach() viene eseguita per ciascun elemento dell'array, visualizzando nel nostro caso l'elenco degli elementi dell'array. Da notare come in questo esempio abbiamo passato una funzione anonima direttamente come parametro di forEach() invece che una variabile a cui è assegnata una funzione. Un'alternativa è la definizione di una classica funzione con nome ed il passaggio del nome della funzione come callback:

function mostraValore(valore, indice) {
	console.log(valore);
}
var numeri = [11, 3, 24];
numeri.forEach(mostraValore);

Altro esempio, sempre sugli array, è dato dal metodo sort() che, come abbiamo visto a suo tempo, consente di ordinare gli elementi di un array. Esso però è in grado di ordinare array con elementi di tipo primitivo, cioè numeri e stringhe.

Per ordinare ad esempio un array di oggetti dobbiamo ricorrere ad un funzione di callback da passare al metodo sort() che verrà internamente utilizzata per stabilire il criterio di confronto tra gli elementi dell'array. Il seguente codice mostra un esempio di questo tipo:

var persone = [{nome: "Mario",    cognome: "Rossi", professione: "impiegato"},
               {nome: "Giuseppe", cognome: "Verdi", professione: "operaio"},
			   {nome: "Marco",    cognome: "Neri",  professione: "insegnante"},];
persone.sort(function(a, b) {
	if (a.cognome < b.cognome) return -1;
	if (a.cognome > b.cognome) return 1;
	return 0;
});

Come possiamo vedere, ordiniamo un array di oggetti in base al valore della proprietà cognome. La funzione di callback deve restituire il valore 1 se il primo parametro viene prima del secondo nell'ordinamento, -1 se accade il contrario e 0 se è uguale.

Ti consigliamo anche