Tre ragioni principali a cui posso pensare:
- Accesso ambito genitore
- Privacy
- Riduzione dei nomi definiti negli ambiti superiori
Accesso ambito genitore: le definizioni di funzioni in linea consentono al codice in linea di accedere alle variabili definite negli ambiti padre. Questo può essere molto utile per molte cose e può ridurre la quantità o la complessità del codice se fatto correttamente.
Se inserisci il codice in una funzione definita al di fuori di questo ambito e quindi chiami il codice, dovrai passare qualsiasi stato genitore a cui desidera accedere alla funzione.
Privacy: il codice all'interno di una definizione anonima incorporata è più privato e non può essere chiamato da altro codice.
Riduzione dei nomi definiti negli ambiti superiori: Questo è il più importante quando si opera nell'ambito globale, ma una dichiarazione anonima in linea evita di dover definire un nuovo simbolo nell'ambito corrente. Dal momento che Javascript non richiede in modo nativo l'uso di spazi dei nomi, è consigliabile evitare di definire altri simboli globali rispetto a quelli minimi richiesti.
Editoriale: Sembra che sia diventato una cosa culturale in Javascript dove dichiarare qualcosa di anonimo in linea è in qualche modo considerato "migliore" della definizione di una funzione e chiamarla anche quando l'accesso all'ambito genitore non viene utilizzato. Sospetto che ciò sia stato inizialmente dovuto al problema dell'inquinamento globale nello spazio dei nomi in Javascript, forse a causa di problemi di privacy. Ma ora si è trasformato in qualcosa di culturale e puoi vederlo espresso in molti corpi pubblici di codice (come quelli che hai citato).
In linguaggi come il C ++, la maggior parte probabilmente considererebbe una pratica tutt'altro che ideale avere una funzione gigante che si estende su molte pagine / schermate. Ovviamente, C ++ ha un namespacing integrato, non fornisce l'accesso all'ambito genitore e ha caratteristiche di privacy in modo che possa essere motivato interamente dalla leggibilità / manutenibilità, mentre Javascript deve usare l'espressione del codice per raggiungere l'accesso alla privacy e all'ambito genitore. Quindi, JS sembra essere stato motivato in una direzione diversa ed è diventato qualcosa di culturale nella lingua, anche quando le cose che hanno motivato quella direzione non sono necessarie in un caso specifico.