Tre motivi principali a cui posso pensare:
- Accesso ambito genitore
- vita privata
- Riduzione dei nomi definiti in ambiti superiori
Accesso ambito padre: le definizioni delle funzioni incorporate consentono al codice incorporato 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 si inserisce il codice in una funzione definita al di fuori di questo ambito e quindi si chiama il codice, è necessario passare qualsiasi stato padre a cui si 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 in ambiti più alti: questo è molto importante quando si opera nell'ambito globale, ma una dichiarazione anonima in linea impedisce di definire un nuovo simbolo nell'ambito attuale. Poiché Javascript non richiede in modo nativo l'uso di spazi dei nomi, è saggio evitare di definire simboli più globali di quelli minimamente richiesti.
Editoriale: sembra essere diventato una cosa culturale in Javascript in cui dichiarare qualcosa di anonimo in linea è in qualche modo considerato "migliore" rispetto alla definizione di una funzione e alla sua chiamata anche quando l'accesso all'ambito genitore non viene utilizzato. Ho il sospetto che questo inizialmente fosse a causa del problema globale dell'inquinamento dello spazio dei nomi in Javascript, quindi forse a causa di problemi di privacy. Ma ora si è trasformato in qualcosa di culturale e puoi vederlo espresso in molti enti pubblici di codice (come quelli che menzioni).
In linguaggi come il C ++, molti probabilmente considererebbero una pratica tutt'altro che ideale avere una funzione gigante che si estende su molte pagine / schermate. Naturalmente, C ++ ha lo spazio dei nomi integrato, non fornisce l'accesso all'ambito padre e ha funzionalità di privacy, quindi può essere completamente motivato dalla leggibilità / manutenibilità, mentre Javascript deve usare l'espressione del codice per ottenere la privacy e l'accesso all'ambito padre. Quindi, JS sembra essere stato motivato in una direzione diversa ed è diventato in qualche modo una cosa culturale all'interno della lingua, anche quando le cose che hanno motivato quella direzione non sono necessarie in un caso specifico.