Funciones anónimas y autoejecutables en javascript
¿Sabías que en javascript una función puede contener a otras? Pues ahora ya lo sabes. Fíjate en el siguiente código:
function barrioSesamo() {
function epi() {
alert(‘hola Blas’);
}
function blas() {
alert(‘hola Epi’);
}
epi();
blas();
}
barrioSesamo();
// el navegador nos presentará un par
// de alertas, a saber, “hola Blas” y
// “hola Epi”
Nada impresionante, por el momento. Lo interesante del asunto es que, al definir la función `epi` dentro de la función `barrioSesamo`, el ámbito de la misma (scope) queda limitado, de manera que solo podemos llamar a `epi` desde su propio barrio.
Vale, sigo sin impresionarte.
¿Qué ganamos al definir funciones de esta manera? Al limitar el ámbito de la función, **evitamos colisiones** con (posibles) funciones del mismo nombre (posiblemente) definidas en otro(s) script(s).
Veamos ahora eso de las funciones anónimas:
function() {
alert(‘soy la función sin nombre’);
}
Queda claro: una función anónima es… efectivamente, una función que no tiene nombre. Y si no tiene nombre, ¿cómo demonios hacemos una llamada a la misma? Truco: haciendo que se ejecute por su cuenta.
(
function() {
alert(‘me ejecuto yo solita’);
}
)();
Fíjate bien en la sintaxis: la función va definida entre un par de paréntesis, a continuación de los cuales viene otro par, que utilizamos para **ejecutar la llamada**.
¿Aún impasible? Eres duro, tío. Quizá la traca final consiga impresionarte:
(
function() {
function hazCosasMaravillosasConElDOM() {
// lo que fuere
}
//addEvent() by John Resig
function addEvent( obj, type, fn ){
if (obj.addEventListener){
obj.addEventListener( type, fn, false );
}
else if (obj.attachEvent){
obj[“e”+type+fn] = fn;
obj[type+fn] = function(){ obj[“e”+type+fn]( window.event ); }
obj.attachEvent( “on”+type, obj[type+fn] );
}
}
// la función comienza a ejecutarse
// en la próxima línea
addEvent(window, ‘load’, hazCosasMaravillosasConElDOM);
}
)();
¿Lo pillas? Ahora tenemos un script **completamente encapsulado**, que se **ejecuta él solito** y que jamás de los jamases colisionará con otros scripts con los que le toque convivir.
El colmo de la **no intrusividad**.
La gran cantidad de LiveCD de Linux, sobre todo aquellas enfocadas a distintas actividades, hace que los amantes de Linux tengan varios CDs con distintas versiones. Por ello Nautopia.net ha creado un script que instala todas estas versiones en un único DVD. Por ahora admite las siguientes distribuciones: Knoppix, Kanotix, Kurumin, Livux, MEPIS, ProMEPIS, Slax, Aurox, BerryLinux, Basilisk, Adios, PCLinuxOS, MandrakeMove, Gnoppix, RiP, SystemRescueCD, Ultimate Boot CD, …