Três razões principais em que posso pensar:
- Acesso ao escopo pai
- Privacidade
- Redução de nomes definidos em escopos superiores
Acesso ao escopo pai: as definições de função embutida permitem que o código embutido tenha acesso às variáveis definidas nos escopos pai. Isso pode ser muito útil para muitas coisas e pode reduzir a quantidade ou a complexidade do código, se feito corretamente.
Se você colocar o código em uma função definida fora deste escopo e depois chamar o código, precisará passar qualquer estado pai que ele deseje acessar para a função.
Privacidade: o código dentro de uma definição anônima embutida é mais privado e não pode ser chamado por outro código.
Redução de nomes definidos em escopos mais altos: isso é mais importante ao operar no escopo global, mas uma declaração anônima em linha impede que seja necessário definir um novo símbolo no escopo atual. Como o Javascript não exige nativamente o uso de espaços para nome, é aconselhável evitar definir mais símbolos globais do que o mínimo necessário.
Editorial: Parece ter se tornado algo cultural em Javascript, onde declarar algo anonimamente inline é considerado "melhor" do que definir uma função e chamá-la mesmo quando o acesso ao escopo pai não é usado. Suspeito que isso tenha ocorrido inicialmente devido ao problema global de poluição do namespace em Javascript e, talvez, devido a problemas de privacidade. Mas agora se transformou em algo cultural, e você pode vê-lo expresso em muitos órgãos públicos de código (como os mencionados).
Em linguagens como C ++, a maioria provavelmente consideraria uma prática abaixo do ideal ter uma função gigante que se estende por várias páginas / telas. Obviamente, o C ++ possui espaço para nome embutido, não fornece acesso ao escopo pai e possui recursos de privacidade, para que possa ser totalmente motivado pela legibilidade / manutenção, enquanto o Javascript deve usar a expressão de código para obter privacidade e acesso ao escopo pai. Assim, JS parece ter sido motivado em uma direção diferente e tornou-se algo cultural na linguagem, mesmo quando as coisas que motivaram essa direção não são necessárias em um caso específico.