Ein IIFE ist die EINZIGE Möglichkeit den globalen Namespace nicht zu belasten.
Manche schreiben ja
new function() { … };
anstatt
(function() { … })();
was vor allem beim Revealing Module Pattern sinnvoll sein kann
var Module = new function() {
var private = 1;
var public = function() { alert(private) };
this.foo = public;
};
vs.
var Module = (function() {
var private = 1;
var public = function () {};
return {
foo: public
};
})();
Ich finde »new« hier verwirrend (eigentlich ist es überall verwirrend, wenn man nicht ECMAScript-Interna kennt), daher bevorzuge ich die explizite Variante der IIFE.
Mathias