Construindo uma biblioteca JavaScript, por que usar um IIFE dessa maneira?
Percebi que muitas bibliotecas usam esse estilo abaixo para definir sua biblioteca. Percebo também que a primeira função auto-invocável tem algo a ver com os sistemas Require.js ou AMD, eles sempre têm como argumento a fábrica, vou analisar mais o Require.js, sempre o Browserify.
Por que o código principal é passado no final da primeira função auto-invocável entre parênteses, se é um fechamento ou apenas é considerada uma função anônima, vou me aprofundar em ambos. Quais são os benefícios para isso? Parece que dentro do fechamento o autor passa umstring
, this
e umcallback
.
Isso dará à minha biblioteca uma maneira limpa e segura de globalizar o objeto principal neste exemplo abaixoPlease
?
(function( globalName, root, factory ) {
if ( typeof define === 'function' && define.amd ) {
define( [], factory );
}
else if ( typeof exports === 'object' ) {
module.exports = factory();
}
else{
root[globalName] = factory();
}
}('Please', this, function(){
Estou tentando me aprofundar no JavaScript e criar minha própria pequena arquitetura MVC, não quero ouvir que sou bobo ou já foi feito antes, quero me desafiar e aprender.
Se houver ótimos recursos para criar uma biblioteca JavaScript ou, melhor ainda, uma biblioteca MVC, eu adoraria saber.