Quando non usarle e perché
Le funzioni in JavaScript sono cittadini di prima classe o oggetti di prima classe, ciò significa che possiamo fare cose come passarle come parametro in una funzione o restituirle come risultato dell’esecuzione di una funzione.
Puoi leggere di più sulle funzioni qui:
Ti spiego cos’è una funzione anonima (AF) con il codice:
Quindi una AF è una funzione che non è salvata in una variabile o ha un nome dichiarato dopo l’identificatore “function”.
Quando non usarle
Il primo problema con le AF è che non hanno un nome, una dichiarazione piuttosto stupida, ma per gli sviluppatori, il nome di una variabile, classe o metodo è la principale documentazione che abbiamo sulle responsabilità e i comportamenti di quella variabile, classe o metodo. Un cattivo nome può farci fare un sacco di errori come aspettarsi che una funzione restituisca qualcosa quando il suo codice attuale stampa qualcosa nella console e restituisce vuoto, per esempio se avessimo chiamato la nostra “funcionResultPrinter” con qualcosa come “functionResultGetter”.
Quindi il primo momento in cui non dobbiamo usare funzioni anonime è quando abbiamo bisogno di un nome descrittivo, e questo generalmente non succede mai.
Il secondo problema è che le AF sono dichiarate e salvate in memoria in runtime. Questo significa che ogni volta che un AF sarà eseguito prenderà un altro posto in memoria e questo può aumentare la potenza di calcolo necessaria per quella parte di codice.
Facciamo un altro esempio con codice:
In questo esempio abbiamo un AF con quasi nessun sforzo computazionale richiesto ma possiamo fare un lavoro pesante su una funzione per ottenere ciò di cui abbiamo bisogno, e questo può consumare molte risorse dal nostro server o dal browser client.
La soluzione è nominare la funzione:
Finalmente facciamo qualche benchmark:
Riprendendo
Abbiamo due casi in cui dobbiamo evitare l’uso di funzioni anonime:
- Quando la funzione necessita di un nome descrittivo.
- Quando abbiamo bisogno di usare una funzione che ha bisogno di molta potenza di calcolo
.