Три головні причини, про які я можу придумати:
- Доступ для батьків
- Конфіденційність
- Скорочення імен, визначених у вищих масштабах
Доступ до батьківського діапазону : визначення вбудованих функцій дозволяє вбудованому коду мати доступ до змінних, визначених у батьківських областях. Це може бути дуже корисним для багатьох речей і може зменшити кількість або складність коду при правильному виконанні.
Якщо ви введете код у функцію, визначену поза цією областю, а потім зателефонуєте до коду, вам доведеться передати будь-який батьківський стан, який він хотів отримати доступ до функції.
Конфіденційність: Код всередині вбудованого анонімного визначення є більш приватним і не може бути викликаний іншим кодом.
Скорочення імен, визначених у вищих масштабах : Це найважливіше під час роботи в глобальному масштабі, але вбудована анонімна заява утримує від необхідності визначення нового символу в поточному масштабі. Оскільки Javascript не вимагає використання просторів імен, то розумно уникати визначення більш глобальних символів, ніж мінімально необхідних.
Редакція: Схоже, це стало культурною річчю в Javascript, де декларування чогось анонімного вбудованого якимось чином вважається «кращим», ніж визначення функції та виклик її навіть тоді, коли доступ до батьківських областей не використовується. Я підозрюю, що це було спочатку через глобальну проблему забруднення простору імен у Javascript, потім, можливо, через проблеми конфіденційності. Але це тепер перетворилося на якусь культурну річ, і ви можете бачити, що це виражається у багатьох публічних кодексах (на кшталт тих, які ви згадуєте).
У таких мовах, як C ++, більшість, мабуть, вважають недостатньо ідеальною практику мати одну гігантську функцію, яка поширюється на багато сторінок / екранів. Звичайно, у C ++ вбудований простір імен, не надає доступ до батьківських областей та має функції конфіденційності, тому його можна повністю мотивувати читабельністю / ремонтопридатністю, тоді як Javascript повинен використовувати вираз коду для досягнення конфіденційності та доступу до батьківських областей. Отже, JS, як видається, мотивовано в іншому напрямку, і це стає дещо культурною річчю всередині мови, навіть коли речі, що мотивували цей напрямок, не потрібні в конкретному випадку.