Su richiesta, ecco i commenti presentati come una risposta:
Non sono sicuro che tu senta completamente il fatto che le funzioni in JS sono oggetti di prima classe e possono quindi essere archiviate fino al momento in cui sono state create.
Ad esempio, supponiamo di voler scrivere su un file, quindi stampare un messaggio di registro; quindi chiamate la funzione "write ()" (o qualunque altra cosa) e le passate una funzione che emette il messaggio di log (questa è la funzione di callback differita). "write ()" memorizza internamente un riferimento a una determinata funzione, inizia a scrivere sul file e imposta il proprio callback per sapere quando la scrittura è terminata. Quindi ritorna prima che la scrittura sia terminata; quando lo è, il callback interno viene in qualche modo chiamato (questo è il lavoro del framework sottostante - nel caso di node.js, è fatto con un loop di eventi), che quindi chiama il callback che stampa il messaggio di registro.
La parte "differita" significa semplicemente che la funzione di richiamata non viene chiamata immediatamente; chiamarlo è rinviato al momento opportuno. Nel caso di funzioni asincrone come molte di quelle in node.js, il callback dato viene generalmente chiamato al termine dell'operazione (o si verifica un errore).
La maggior parte delle cose è asincrona in node.js, ma nel browser con ad esempio jQuery, la maggior parte delle cose è in realtà sincrona (tranne, ovviamente, per le richieste AJAX). Poiché le funzioni di prima classe sono così utili in JavaScript (soprattutto a causa dell'ottimo supporto di chiusura), i callback sono utilizzati anche ovunque nel browser, ma non sono "differiti" per le operazioni sincrone (tranne nella misura in cui non sono chiamati immediatamente da tu, ma più tardi dalla funzione che chiami).
Il fatto che il sistema sottostante sia guidato dagli eventi è ortogonale all'uso di callback differiti; puoi immaginare una versione (molto lenta) di node.js che ha avviato un thread per ogni operazione, quindi ha chiamato il tuo callback dato quando il thread ha terminato il suo lavoro, senza usare eventi. Certo, questo è un modello orribile, ma illustra il mio punto :-)
Deferred
oggetti di jQuery ? Si tratta di qualcosa di specifico per Node.js?