Quando não as usar e porquê
Funções em JavaScript são cidadãos de primeira classe ou objectos de primeira classe, isso significa que podemos fazer coisas como passá-las como parâmetro em uma função ou devolvê-las como resultado da execução de uma função.
Yoy pode ler mais sobre funções aqui:
I’ll ll explain what a anonymous function (AF) is with code:
Então um AF é uma função que não é salva em uma variável ou tem um nome declarado após o identificador “function”.
Quando não usá-los
O primeiro problema com AFs é que não tem nome, uma aclaração bem estúpida, mas para os desenvolvedores, o nome de uma variável, classe ou método é a principal documentação que temos sobre as responsabilidades e comportamentos dessa variável, classe ou método. Um mau nome pode nos deixar fazer muitos erros como esperar que uma função retorne algo quando seu código real imprime algo no console e retorna vazio, por exemplo, se tivéssemos nomeado nossa “funcionResultPrinter” com algo como “functionResultGetter”.
Então o primeiro momento em que não temos de usar funções anónimas é quando precisamos de um nome descritivo, e que em geral isso acontece sempre.
O segundo problema é que os AFs são declarados e guardados na memória em tempo de execução. Isso significa que toda vez que um AF for executado, haverá outro lugar na memória e isso pode aumentar a potência computacional necessária para essa parte do código.
Vamos fazer outro exemplo com o código:
Nesse exemplo temos um AF quase sem esforço computacional, mas podemos fazer um trabalho pesado em uma função para obter o que precisamos, e isso pode consumir muitos recursos do nosso servidor ou do browser do cliente.
A solução é nomear a função:
Finalmente vamos fazer algum benchmark:
Resumindo
Temos dois casos em que precisamos evitar o uso de funções anónimas:
- Quando a função precisa de um nome descritivo.
- Quando precisamos usar uma função que precisa de muita potência computacional.