Las funciones en JavaScript son ciudadanos de primera clase o objetos de primera clase, eso significa que podemos hacer cosas como pasarlas como parámetro en una función o devolverlas como resultado de ejecutar una función.
Puedes leer más sobre las funciones aquí:
Explicaré lo que es una función anónima (AF) con código:
Así que una AF es una función que no está guardada en una variable o tiene un nombre declarado después del identificador «function».
Cuándo no usarlos
El primer problema con los AFs es que no tiene nombre, una aclaración bastante estúpida, pero para los desarrolladores, el nombre de una variable, clase o método es la principal documentación que tenemos sobre las responsabilidades y comportamientos de esa variable, clase o método. Un mal nombre puede permitirnos cometer muchos errores como esperar que una función devuelva algo cuando su código real imprime algo en la consola y devuelve void, por ejemplo si hubiéramos nombrado nuestra «funcionResultPrinter» con algo como «functionResultGetter».
Así que el primer momento en el que no tenemos que usar funciones anónimas es cuando necesitamos un nombre descriptivo, y eso generalmente ocurre siempre.
El segundo problema es que las FAs se declaran y guardan en memoria en tiempo de ejecución. Eso significa que cada vez que se ejecute un AF ocupará otro lugar en la memoria y eso puede aumentar la potencia de cálculo necesaria para esa parte del código.
Hagamos otro ejemplo con código:
En ese ejemplo tenemos un AF que casi no requiere esfuerzo de cálculo pero podemos hacer un trabajo pesado en una función para obtener lo que necesitamos, y eso puede consumir muchos recursos de nuestro servidor o del navegador del cliente.
La solución es nombrar la función:
Finalmente vamos a hacer algún benchmark:
Resumiendo
Tenemos dos casos en los que necesitamos evitar el uso de funciones anónimas:
- Cuando la función necesita un nombre descriptivo.
- Cuando necesitamos utiliza una función que necesita mucha potencia de cálculo.