JavaScript è anche un linguaggio di programmazione funzionale. Quello che hai qui è una «funzione di ordine superiore», una funzione che prende una funzione come parametro. Le funzioni di ordine superiore sono sincrone (ma vedi nota sotto).
Fonti:
map()
è un tipico esempio di una funzione di ordine superiore. Prende una funzione e la applica a tutti gli elementi di un array. La definizione suona molto «funzionale». Questa funzione non è fornita dal nodo. È documentato da MDN Array.prototype.map() e specificato da ECMAScript 5.1.
Per rispondere alla tua domanda: Sì, è chiamato dopo tutti gli elementi sono stati applicati.
Nota: La funzione di ordine superiore è un concetto di programmazione funzionale. JavaScript è funzionale, ma anche profondamente inserito nella praticità dell'esecuzione di codice all'interno di un browser o sul server. Direi che ad esempio
setTimeout()
non è una funzione di ordine superiore anche se accetta una funzione come parametro perché
setTimeout()
non è realmente puramente funzionale perché utilizza il tempo. La pura funzionalità è senza tempo. Ad esempio il risultato di
map()
non dipende dal tempo. E questa è la vera domanda. Se qualcosa non dipende dal tempo, lo si esegue in modo sincrono. Problema risolto.
Grazie a Simon per aver sfidato la definizione della funzione di ordine superiore in JavaScript.
cos'è $ qui? map accetta una funzione di callback da applicare a ciascun membro dell'elenco, non una richiamata quando l'iterazione completa è completa. – chovy
Grazie chovy.Per quanto riguarda $, stavo solo sperimentando il modulo node-jquery e non mi sono preoccupato di modificarlo. – bonchef