Existe algum motivo para definir module.exports usando um IIFE?
Minha equipe não possui desenvolvedores de JS experientes, mas estamos escrevendo uma biblioteca no Node e recebemos uma sugestão de um desenvolvedor de JS real de que "devemos tornar os js mais modulares - para não poluir o espaço para nome global e torná-lo mais legível aos recém-chegados "e nos disse para fazer o seguinte:
module.exports = (function(){
return {
nameToExpose: functionToExpose
...
};
})();
ao invés de
module.exports.nameToExpose = functionToExpose;
Qual o sentido disso, se houver? Este último não faz nenhuma declaração local que teria o escopo definido pelo IIFE e, mesmo que fosse, seria local no arquivo do módulo e não global para todo o programa querequire()
é isso.
Alguns usuários do Google pesquisando e cutucando este site não apresentam respostas a essa pergunta em particular, embora existam muitas outras explicações dos IIFEs que eu li (e que estão resumidas no comentário acima). Alguns testes certamente revelam que o últimonão realmente colocarfunctionToExpose
no espaço para nome global, embora seu nome original esteja registrado no próprio tipo de função.