Trzy główne powody, o których mogę myśleć:
- Dostęp do zakresu nadrzędnego
- Prywatność
- Redukcja nazw zdefiniowanych w wyższych zakresach
Dostęp do zakresu nadrzędnego: Definicje funkcji wbudowanych umożliwiają kodowi wbudowanemu dostęp do zmiennych zdefiniowanych w zakresach nadrzędnych. Może to być bardzo przydatne dla wielu rzeczy i może zmniejszyć ilość lub złożoność kodu, jeśli zostanie wykonana poprawnie.
Jeśli umieścisz kod w funkcji zdefiniowanej poza tym zakresem, a następnie wywołasz kod, będziesz musiał przekazać dowolny stan nadrzędny, który chciałby uzyskać dostęp do funkcji.
Prywatność: kod wewnątrz wbudowanej anonimowej definicji jest bardziej prywatny i nie może być wywoływany przez inny kod.
Redukcja nazw zdefiniowanych w wyższych zakresach: Jest to najważniejsze w przypadku działania w zakresie globalnym, ale wbudowana anonimowa deklaracja nie wymaga definiowania nowego symbolu w bieżącym zakresie. Ponieważ Javascript nie wymaga natywnego użycia przestrzeni nazw, mądrze jest unikać definiowania większej liczby globalnych symboli niż jest to wymagane minimalnie.
Od redakcji: Wydaje się, że stało się to kulturową rzeczą w Javascript, gdzie deklarowanie czegoś anonimowo wewnątrz jest uważane za „lepsze” niż definiowanie funkcji i wywoływanie jej, nawet gdy nie jest używany dostęp do zakresu nadrzędnego. Podejrzewam, że początkowo było to spowodowane globalnym problemem zanieczyszczenia przestrzeni nazw w Javascripcie, a następnie być może z powodu problemów z prywatnością. Ale teraz zmieniło się to w coś kulturowego i widać to w wielu publicznych kodeksach (takich jak te, o których wspominasz).
W językach takich jak C ++ większość uważa, że posiadanie jednej gigantycznej funkcji, która rozciąga się na wiele stron / ekranów, nie jest idealną praktyką. Oczywiście, C ++ ma wbudowaną przestrzeń nazw, nie zapewnia dostępu do zakresu nadrzędnego i ma funkcje prywatności, więc może być całkowicie zmotywowana przez czytelność / konserwację, podczas gdy Javascript musi używać wyrażenia kodu, aby uzyskać prywatność i dostęp do zakresu nadrzędnego. Wygląda na to, że JS zostało zmotywowane w innym kierunku i stało się czymś kulturowym w języku, nawet jeśli rzeczy, które motywowały ten kierunek, nie są potrzebne w konkretnym przypadku.