9.29.2008

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.

Fuente:
http://dizque.lacalabaza.net/sotanos/2006/05/funciones-anonimas-y-autoejecutables-en-javascript/

3 comentarios:

Anónimo dijo...

Excelente!!! javascript tiene poder ;), mucho del concepto de funciones anónimas son usadas por frameworks como jquery para facilitar la escritura del código.


Siempre es bueno entender como funciona, este artículo deja todo claro

Anónimo dijo...

muy buenos ejemplos me ha dejado claro

Anónimo dijo...

lo que buscaba. Gracias