Funciones especiales de Javascript
En esta sección se explica el funcionamiento de algunas funciones que se usan y se comportan de manera un poco especial. No parecen seguir estrictamnte las reglas vistas al definir el uso de las funciones en Javascript.
Se trata de las funciones
- Funciones IIFE: funciones de ejecución inmediata
- Callback o funciones de llamada
Resumen
Funciones especiales por su uso o por su ejecución.
La callback functions usan el caracter de objeto de las funcioens para usarlas como argumentos.
Las IIFE son funciones que se ejecutan en el momento de ser cargadas por el navegador, sin necesidad de ser invocadas
Las IIFE
El nombre de estas funciones dicen literalmetne expresión de funciones invocadas inmediatamente, pero en una trtraducción mas entendible diríamos que son funciones autoejecutables.
No son más que funciones que se ejecutan sin necesidad de ser invocadas directamente desde el código. Realmetne son invocadas por el navegador cuando se terminan de cargar, pero es un mecanismo interno del intérprete de Javascript.
Estas funciones son anónimas y tiene dos partes
- Definición de la función con el código que se ejecuta
- Argumentos con los que se ejecuta.
En esencia sería como el ejemplo
(function (a) { console.log("IIFE functions: "+a) } )("argumentos");
Si pruebas este ejemplo veras que se ejecuta y en la consola aparece la frase "IIFE functions: argumentos"
No es imprescidnible que la función use ningún parámetro. Es como defnir cualqueir otra función, solo que no es accesible desde fuera de su ámbito, de hehco estas funciones pueen ser anónimas o con nombre.
(function iniciando(a)
{
console.log("Acabo de empezar");
} )("argumentos");
Este tipo de funciones posee su propio espacio de nombres que no es accesible desde fuera. Esto evita que se puedan producir errore por nombres repetidos en distintos archvios de scripts denttro de una misma página.
Notas
IIFE: inmediatley Invoked Epresion Function.
Son funciones autoejecutables que se crean igual que cualquier función. Pueden ser anónimas o nombradas.
A veces el bloque de la definición va perecedido de un símbolo !, +, -, ~. No afecta ala ejecución.
No pueden ser invocadas dede el script y forman una unidad no accesible desde fuera. Pero el cuerpo si puede acceder a variables y funciones globales.
Callback functions
Las funciones callback son funciones normales (con nombre o anónimas) que se usan como argumento de otras funciones o métodos.
Esa forma de uso de las funciones es posible por que las funciones son objetos y por tanto se pueden usar como un argumento de otras funciones o métodos. Bien sea asignándola a una variable (función callback con nombre) o bien mediante una expresión (función callback anónima).
Son muy utilizadas en los métodos del objeto array, en JSON y en el objeto function. También son muy útiles para manejar los eventos de las páginas web y otros procesos asíncronos. Las callback en procesos asíncronos.
Estas funciones pueden definirse como es habitual: con su nombre y la palabra clave function, o pueden definirse in situ sin nombre, como función anónima.
Un ejemplo que usa una función definida para poner a 0 los elementos menores que 5 de un array. En los array las funciones callback reciben tres argumentos: valor del elemento, indice y el array.
var numeros = [3,6,7,2,9];
var copia = new Array(personas.length);
var copiar = function(v,i,a){
if(v<5) { a[i] = 0}
}
numeros.forEach( copiar )
console.log(numeros);
Un ejemplo muy simple con la función callback en modo función anónima
var datos = [23, 2,12,11];
datos.forEach( function(v, i, a) { a[i] = 2*v })
console.log(datos);
En el ejemplo se dobla el valor de cda elemento de la lista.
Ejemplos
Las funciones callback son usadas en el objeto array y en el JSON, pero pueden usarse en cualquier método o función definido en el pograma.
En este ejemplo se usan areaRec y areaTr como funciones callback para la función calcularArea(area, a, b)
function areaTr(a,b){ return a*b/2};
function areaRec(a,b){ return a*b};
function calcularArea(area, a,b) { return area(a,b) }
var area1 = calcularArea(areaRec,4,5);
var area2 = calcularArea(areaTr,4,5);
console.log("Area rectángulo " + area1)
console.log("Area triángulo " + area2)
En proceso asíncronos se usan funciones callback para realizar las acciones que se requieran al finalizar el proceso. Es el caso de los métodos relativos a momentos de ejecuación (setTimeout y setInterval) para animaciones en el navegador.
Funciones flecha
Par completar este apartdo de funciones especiales no podemos dejar atrás a las llamadas funciones de flecha (arrow functions), llamadas así or que se definen con los símbolos =>, una flecha.
Las funciones flecha son un tipo de función de Javascript alternativo que permite código más conciso e intuitivo.
Al prinicipio puede parecerte que se trata solo de una manere diferente de definir las funciones, pero tiene alguna diferencia importante con respecto a las funcinoes, digamos, tradicionales.
La diferencia esencial es el uso del objeto this: estas funciones no tienen objeto this definido, lo heredan del contexto donde son definidas. MIentras las funciones tradionales tienen un objeto this: el objeto que las llamó.
Para terminar de entender este tipo de funciones mejor mira esta página dedicada a las funciones flecha con ejemplos muy clarificadores
Notas
Las funciones flecha son muy habituales en las callfunction.
Por ejemplo en los métodos de arrays, los temporizadores setTimeout o setInterval o en los manejadores de eventos.