Я прочитал в stackoverflow, что Преимущество шаблона IIFE при реализации модулей вместо простого «объявления именованной функции» заключается в том, что в больших проектах он может предотвратить конфликты имен. Однако мне кажется, что IIFE не лучше и не хуже, чем объявление именованной функции для предотвращения конфликта имен.
Рассмотрим 2 метода написания библиотеки, которая предоставляет имя «GenericModuleName»:
Подход IIFE
var GenericModuleName = (function () {
return ObjectWhichHasPublicMethod;
})();
Подход к объявлению именованных функций
function GenericModuleName() {
return {
PublicMethod : function () { privateMethod(); }
}
};
В обоих случаях, если пользователь библиотеки по совпадению также имеет функцию с именем GenericModuleName, все равно будет конфликт имен, не так ли? Так чем же IIFE лучше «объявления именованной функции» для предотвращения конфликта имен?
()
после определения вызывает его немедленно. Вот почему это называется выражением функции с немедленным вызовом. - person Barmar   schedule 01.08.2016ModuleA
, так как это имя IIFE. - person Barmar   schedule 01.08.2016jQuery
), вы не даете ему имя, если вам просто нужно вызвать его один раз для инициализации модуля. - person Barmar   schedule 01.08.2016