Существует 3 обычных способа создания модуля IIFE. Все они возвращают одно и то же значение, но синтаксически выглядят по-разному. Все они используют замыкания для доступа к закрытым свойствам внешней функции.

IIFE — это немедленно вызываемое функциональное выражение: внешняя функция заключена в круглые скобки и выполняется путем добавления завершающего набора круглых скобок. Когда эта функция выполняется, она возвращает объект, внутренние функции которого могут ссылаться на частные свойства через замыкания.

Соглашение №1: объявляйте функции в возвращаемом объекте:

вар мод = (функция () {

var privateProp = ‘имя’;

возвращение {

getName : function() { return privateProp; }

};

})();

2. Соглашение № 2: объявляйте функции вне возвращаемого объекта и используйте свойства метода возвращаемого объекта для ссылки на эти внутренние функции:

режим переменной = (функция () {

var privateProp = ‘имя’;

функция _getName() {

вернуть частноепроп;

}

возвращение {

получитьИмя : _получитьИмя

};

})();

3. Соглашение №3: объявите функции вне возвращаемого объекта и создайте объект для назначения этих внутренних функций свойствам метода объекта:

вар мод = (функция () {

var privateProp = ‘имя’;

вар темпмод = {};

tempMod.getName = функция () {

вернуть частноепроп;

}

вернуть темпмод;

})();

Все эти 3 способа создания модуля IIFE создают замыкания, которые возвращают объект, функции которого могут обращаться к закрытым свойствам.