Fala, @deMenezes. A técnica em si, é realmente muito interessante. Li seu texto e notei que embora tu tenha apresentado bons cenários de caso de uso para exemplificar a aplicação dos IIFEs, acredito que posso adicionar alguns detalhes ao texto.
Qual era o contexto em que ele se fazia necessário?
Em uma época aonde o Javascript ainda era terra sem lei, a maior dor era como isolar escopo e expor apenas o necessário em um módulo. Neste contexto IIFEs eram a salvação.
Tanto que era comum ver libs JS até idos de 2017/18 ainda usando IIFEs no module pattern. De lá pra cá, já tem um tempo que não vejo isso.
Tá, mas o quê mudou?
Depois da introdução de blocked scope variables (o tal do "let" e "const") o problema de ter variáveis protegidas por escopo foi resolvido. Por exemplo:
{
let x = "qualquer valor"
// Seu código alterando esse valor
}
console.log(x);
// Erro, pois a variável não foi declarada
Já o problema de expor apenas as interfaces desejadas de um módulo, pode ser resolvido com o uso de módulosimport/export
.
Saldo final
IIFEs ainda devem ter algum uso, mas não consigo pensar em nenhum exemplo prático. Porém, acredito que conhecer e entender esta técnica certamente enriquece muito nosso entendimento de como Javascript lidava e lida com escopo e hoisting. Valeu por trazer este tópico.