Три основные причины, которые я могу придумать:
- Доступ к родительской области
- Конфиденциальность
- Сокращение имен, определенных в более высоких областях
Доступ к родительской области: определения встроенных функций позволяют встроенному коду иметь доступ к переменным, определенным в родительских областях. Это может быть очень полезно для многих вещей и может уменьшить объем или сложность кода, если все сделано правильно.
Если вы поместите код в функцию, определенную за пределами этой области, а затем вызовете код, вам придется передать любое родительское состояние, к которому он хочет получить доступ к функции.
Конфиденциальность: код внутри встроенного анонимного определения является более закрытым и не может быть вызван другим кодом.
Сокращение имен, определенных в более высоких областях: это наиболее важно при работе в глобальной области, но встроенное анонимное объявление не требует определять новый символ в текущей области. Поскольку Javascript изначально не требует использования пространств имен, разумно избегать определения более глобальных символов, чем это требуется минимально.
От редакции. Кажется, что это стало культурным явлением в Javascript, когда объявление чего-то анонимно встроенным почему-то считается «лучше», чем определение функции и ее вызов, даже если доступ к родительской области не используется. Я подозреваю, что это было первоначально из-за глобальной проблемы загрязнения пространства имен в Javascript, затем, возможно, из-за проблем конфиденциальности. Но теперь это превратилось в нечто культурное, и вы можете увидеть это во многих открытых частях кода (например, тех, которые вы упоминаете).
В таких языках, как C ++, большинство из них, вероятно, сочли бы нереальной практикой иметь одну гигантскую функцию, которая распространяется на многие страницы / экраны. Конечно, C ++ имеет встроенное пространство имен, не обеспечивает родительский доступ к области и имеет функции конфиденциальности, поэтому его можно полностью мотивировать удобочитаемостью / возможностью сопровождения, тогда как Javascript должен использовать выражение кода для достижения конфиденциальности и доступа к родительской области. Таким образом, JS, похоже, мотивируется в другом направлении, и это становится чем-то культурным в языке, даже когда вещи, которые мотивировали это направление, не нужны в конкретном случае.