(function() { /* code */ })()
короче (function myComponentIIFE(){ /* code */ })()
, занимает в минимизированном коде на 2 байта меньше и меньше времени на обдумывание и ввод.
Имя функции чрезвычайно полезно при отладке только тогда, когда она отлажена в незавершенном приложении с текстовым журналом, который не может быть связан с соответствующими строками. В любом другом случае это бесполезно.
В минимизированном приложении это не приносит пользы отладке и становится чем-то вроде:
(function a(){ /* code */ })();
В строке вывода выходного стека консоли браузера можно динамически переходить к реальному коду, нажимая на них.
IIFE имеют ограниченное использование в современном JavaScript. IIFE широко использовались в ES5 для реализации шаблона модуля и / или обеспечения области для блока кода. Эти виды использования в настоящее время обрабатываются блок-областями и модулями ES6.
Большинство существующих в приложении IIFE-файлов создаются автоматически. Только некоторые из них написаны разработчиком. Если известно, что IIFE приносит пользу отладке или приводит к самодокументируемому коду, то да, имеет смысл дать функции имя.
Примером в современном JS является async
IIFE, который использует, например, в качестве точки входа приложения:
(async function main() {
// ...
})()
.catch(console.error);