Sentido Web

Referencias y explicaciones sobre desarrollo web, PHP, Ajax, XHTML, MySQL ...
05Apr
2006
Comments Off

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**.

Entradas relacionadas

Los comentarios están cerrados.