Por lo general, en la mayor parte de los manuales se indica que las funciones en javaScript deben definirse en el formato clásico:
function miFuncion ( variable1, variable2) {
// Código
}
Sin embargo las funciones en javaScript son mucho más versatiles y permiten ser definidas en cualquier momento, incluso (y esta es la parte brillante) como variables y en los mismos ámbitos que las variables…
var miFuncion = function ( variable1, variable2) {
// Código
}
¿Por qué es tan importante esta modalidad para declarar las funciones? Básicamente, porque nos permite entender las funciones como procesos que podemos definir y redefinir en cualquier momento según nuestras necesidades. Seguidamente mostraré unos cuantos ejemplos de como sacar partido a estas carácteristicas…
Funciones redefinibles
Declaradas de esta forma las funciones pueden ser redefinidas en cualquier momento.
var operacionMatematica = function ( variable1, variable2) {
return variable1 + variable2;
}
// Uso de operacionMatematica() como sumador...
operacionMatematica = function ( variable1, variable2) {
return variable1 * variable2;
}
// Uso de operacionMatematica() como multiplicador...
Definiendo metodos de objetos
Al ser las propiedades de los objetos como variables, la definición de métodos de esta forma se hace mucho más sencilla:
var miObjeto = {
propiedad1 : "valor 1",
metodo1 : function (variable1) {
//código...
}
}
O sobre objetos ya definidos…
var miObjeto = {...}
miObjeto.nuevoMetodo = function () {
// código
}
En lugar de codigos javaScript lanzados desde strings
Resultan muy engorrosas esas opciones de javaScript que te permiten incluir como string y codigo javaScript que luego será ejecutado. Es mucho más cómodo definir como función ese parametro y que sea esta función la que sea lanzada.
// en vez de usar...
setTimeout( "codigo javascript",2000);
// usamos...
setTimeout( function(){
//codigo
},1000);
Pasando procesos a otras funciones
Sobretodo en procesos de callback (acciones a realizar cuando la función acabe) resulta muy util no tener que definir la función que pasamos y en vez de eso definir la función como si fuese una variable de entrada de la primera función.
var miFuncion = function ( variable1, procesoCallBack) {
// Código
var x=1; // Suponiendo que el codigo defina x
var y=2; // Suponiendo que el codigo defina y
procesoCallBack( x , y );
}
miFuncion( "valor cualquiera", function (variable1,variable2 ) {
alert( x + y );
};
// Se ejecutaría el codigo de miFunción y al terminar
// se mostraría un alert que diría "3".
Estas funciones se hacen realmente interesantes como callBacks para procesos Ajax, con restrasos en el tiempo o con animaciones.