Când să nu le folosești și de ce
Funcțiile în JavaScript sunt cetățeni de primă clasă sau obiecte de primă clasă, ceea ce înseamnă că putem face lucruri precum trecerea lor ca parametru într-o funcție sau returnarea lor ca rezultat al executării unei funcții.
Puteți citi mai multe despre funcții aici:
Voi explica ce este o funcție anonimă (AF) cu ajutorul codului:
Atunci o AF este o funcție care nu este salvată într-o variabilă sau are un nume declarat după identificatorul „function”.
Când să nu le folosim
Prima problemă cu AF-urile este că nu are nume, o clarificare destul de stupidă, dar pentru dezvoltatori, numele unei variabile, clase sau metode este principala documentație pe care o avem despre responsabilitățile și comportamentele acelei variabile, clase sau metode. Un nume greșit ne poate permite să facem o mulțime de greșeli, cum ar fi să ne așteptăm ca o funcție să returneze ceva, în timp ce codul său real tipărește ceva în consolă și returnează void, de exemplu dacă am fi numit „funcionResultPrinter” cu ceva de genul „functionResultGetter”.
Așa că primul moment în care nu trebuie să folosim funcții anonime este atunci când avem nevoie de un nume descriptiv, și că în general asta se întâmplă vreodată.
A doua problemă este că AF-urile sunt declarate și salvate în memorie în timpul execuției. Asta înseamnă că de fiecare dată când un AF va fi executat va ocupa un alt loc în memorie și asta poate crește puterea de calcul necesară pentru acea parte a codului.
Să facem un alt exemplu cu cod:
În acest exemplu avem un AF care nu necesită aproape nici un efort de calcul, dar putem face o muncă grea pe o funcție pentru a obține ceea ce avem nevoie, iar asta poate consuma multe resurse de la serverul nostru sau de la browserul clientului.
Soluția este să denumim funcția:
În cele din urmă să facem un benchmark:
Rezumând
Avem două cazuri în care trebuie să evităm utilizarea funcțiilor anonime:
- Când funcția are nevoie de un nume descriptiv.
- Când trebuie să folosim o funcție care are nevoie de multă putere de calcul.
.