Saltar a un capítulo clave
Comprender las Funciones de Llamada de Retorno de Javascript
Probablemente te hayas encontrado con el término "función de devolución de llamada" en tus estudios de Javascript. Pero, ¿qué es exactamente una función de devolución de llamada, y por qué es tan crucial en la programación Javascript? En este artículo, vas a conocer a fondo las funciones de llamada de retorno de Javascript y su papel en la programación asíncrona.
En el mundo de Javascript, las funciones son ciudadanos de primera clase. Esto significa que las funciones, como cualquier otro objeto, pueden pasarse a otras funciones como parámetros. Esta versatilidad de las funciones es la base sobre la que se construyen las funciones de llamada de retorno.
Definir qué es una función de llamada de retorno en Javascript
Una función de llamada de retorno en Javascript es una función que se pasa a otra función como parámetro y luego se invoca dentro de la función externa. El propósito de utilizar funciones de llamada de retorno es realizar una tarea después de que se haya completado una determinada operación asíncrona, garantizando que Javascript siga siendo no bloqueante y eficiente.
function saludo(nombre) { console.log('Hola ' + nombre); } function procesarEntradaDelUsuario(callback) { var nombre = prompt('Introduce tu nombre.'); callback(nombre); } procesarEntradaDelUsuario(saludo);
En el ejemplo anterior, la función 'processUserInput' utiliza una función callback 'greeting'. La función 'saludo' no se invocará hasta que el usuario proporcione la entrada, ilustrando así cómo las funciones de devolución de llamada ayudan a gestionar las operaciones asíncronas.
El papel de una función de llamada de retorno en Javascript
Las funciones de llamada de retorno son fundamentales para la programación asíncrona en Javascript. Ayudan a:
- Garantizar que no se ejecute código específico antes de que se reciba un retorno de una solicitud del servidor.
- Manejar "eventos" que ocurren durante la ejecución del programa, como eventos de clic, eventos de lectura de archivos, etc.
- Otras acciones asíncronas como temporizadores.
El papel clave de las funciones de llamada de retorno en Javascript es controlar el flujo del programa y garantizar que cierto código no se ejecute hasta que otro código haya completado su ejecución.
Estudiar cómo funciona una función de llamada de retorno en Javascript
Para entender cómo funciona una función de llamada de retorno, examinemos un caso de uso común: hacer una petición al servidor.
Supongamos que estás recuperando información del usuario de un servidor. Esta operación puede llevar algún tiempo, pero no quieres detener todo el programa mientras esperas la respuesta del servidor. En lugar de eso, pasa una función de llamada de retorno a la función de petición al servidor. Esta función de llamada de retorno se activará una vez recibida la respuesta del servidor, permitiendo que el resto de tu programa siga ejecutándose mientras tanto.
Pasos fundamentales en la ejecución de una función callback de Javascript
Estos son los pasos fundamentales para ejecutar una función de devolución de llamada javascript:
- La función principal (que toma la función de devolución de llamada como parámetro) comienza a ejecutarse.
- Esta función principal llama a una operación asíncrona.
- Mientras la operación asíncrona hace lo suyo, la función principal sigue ejecutando otro código.
- Cuando la operación asíncrona termina, activa la función de rellamada, dándole los resultados que haya producido.
- La función de llamada de retorno toma estos resultados y hace algo con ellos.
En resumen, la función de llamada de retorno espera pacientemente en segundo plano mientras se ejecuta otro código, entra en acción cuando se le llama y luego sale del escenario con elegancia, tras haber completado su trabajo.
Desembalaje de un ejemplo de función de llamada de retorno en Javascript
Observar ejemplos de funciones de llamada de retorno en JavaScript puede ser inmensamente beneficioso cuando se trata de comprender realmente su utilidad. Por lo tanto, vamos a profundizar en algunos ejemplos que van desde usos sencillos a complejos de las funciones de llamada de retorno.
Desmenuzando un ejemplo sencillo de función de llamada de retorno en Javascript
Empecemos con una simple función de devolución de llamada de Javascript. Este ejemplo ilustrará cómo una función puede convertirse en parámetro de otra función. Además, observaremos cómo se invoca dentro de esa función. Echa un vistazo:
function simpleCallbackFunction(mensaje, callback) { console.log('El mensaje es: ' + mensaje); callback(); } simpleCallbackFunction('¡Hola, alumno de Javascript!', function() { console.log('¡Esta declaración procede de la función callback!'); });
Descompongamos el código:
- Existe la función simpleCallbackFunction( ) que toma dos parámetros: mensaje, que es una cadena, y callback, que es una función de devolución de llamada.
- Dentro de la función, primero registra el mensaje en la consola.
- A continuación, invoca la función de llamada de retorno.
- Al llamar a la función, pasamos una cadena para el mensaje y definimos la función de llamada de retorno allí mismo, en la llamada a la función.
- Esta función de llamada de retorno también registra un mensaje en la consola.
Por lo tanto, la salida de este código será:
El mensaje es: ¡Hola, alumno de Javascript! ¡Esta declaración procede de la función de llamada de retorno!
La utilización directa de una función de llamada de retorno en este ejemplo muestra la esencia de su propósito: ser invocada después de que se hayan completado ciertas tareas dentro de una función.
Desentrañar un complejo ejemplo de función de devolución de llamada en Javascript
Ahora que tienes una comprensión básica de las funciones de llamada de retorno sencillas, demos un paso más y exploremos un ejemplo más complejo que incluya el método forEach() de Array, un método incorporado en JavaScript que acepta una función de llamada de retorno como parámetro.
let arr = ['manzana', 'plátano', 'cereza']; arr.forEach(function(elemento, índice) { console.log(índice + ' -> ' + elemento); });
En este ejemplo, se trata de
- Un array de tres frutas.
- El método forEach( ) recorre cada elemento de la matriz.
- Para cada elemento, llama a la función de devolución de llamada con dos parámetros: el elemento actual y el índice del elemento.
- Dentro de la función de llamada de retorno, registra una cadena que contenga el índice y el valor de cada elemento.
La salida de este trozo de código será
0 -> manzana 1 -> plátano 2 -> cereza
Esto sirve para ilustrar cómo se utilizan las funciones de llamada de retorno en funciones de orden superior como forEach(), que son una parte esencial del Javascript moderno.
Explorando la función de llamada de retorno anónima en Javascript
Aprender sobre las funciones de llamada de retorno anónimas es otro aspecto apasionante de tu viaje por Javascript. Estas funciones únicas desempeñan un papel importante en Javascript y pueden agilizar tu código significativamente.
Definición de la función de llamada de retorno anónima en Javascript
Las funciones anónimas de llamada de retorno en Javascript, también conocidas como funciones anónimas o funciones lambda, son funciones que se definen y utilizan sin asignarlas a una variable ni darles un nombre de función. Este tipo de función se utiliza sobre todo como función de llamada de retorno porque puede pasarse directamente como argumento a otras funciones sin tener que ser llamada por un nombre de función específico.
Las funciones anónimas se suelen utilizar cuando una función sólo se usa una vez y no requiere reutilización. Recuerda que la reutilización del código es un aspecto importante de la programación, y que sólo debes utilizar funciones anónimas cuando sea necesario.
Veamos un ejemplo básico de función anónima:
var array = ['JavaScript', 'Python', 'Java']; array.forEach(function(elemento) { console.log(elemento); });
El código anterior registrará cada elemento del array en la consola. La función utilizada dentro del método forEach es una función anónima porque no tiene nombre ni se almacena en una variable.
Casos de uso de la función de llamada de retorno anónima en Javascript
Una función de llamada de retorno anónima es útil en muchos casos en Javascript. Algunos de los casos de uso más comunes son
- A menudo se utilizan en métodos funcionales como forEach(), map(), filter() y reduce(), ya que te permiten proporcionar una función de llamada de retorno justo donde se necesita.
- Las funciones anónimas también pueden utilizarse en escuchadores o manejadores de eventos. Por ejemplo, en un receptor de eventos para el clic de un botón, puedes utilizar una función anónima como función de llamada de retorno. Esto es especialmente útil cuando quieres evitar que el espacio de nombres global se llene de numerosos nombres de funciones.
- A menudo utilizas estas funciones en expresiones de función invocadas inmediatamente (IIFE), que son funciones que se ejecutan en cuanto se definen.
Veamos un ejemplo en el que utilizamos una función anónima como manejador de eventos:
var button = document.querySelector('button'); button.addEventListener('click', function() { console.log('¡Botón pulsado!'); });
En este ejemplo
- La variable 'button' se asigna al primer elemento botón del documento.
- Se llama al método 'addEventListener' en el botón, especificando que queremos escuchar un evento 'clic'.
- Se pasa una función anónima como segundo argumento a 'addEventListener', que sirve como controlador del evento. La función se invocará cada vez que se pulse el botón, haciendo que se registre en la consola '¡Botón pulsado!
Las funciones anónimas proporcionan flexibilidad, evitan la contaminación del espacio de nombres global y mejoran la legibilidad del código. Si se utilizan correctamente, pueden optimizar tu flujo de trabajo de desarrollo.
Identificar las características de las funciones de llamada de retorno de Javascript
Las funciones de llamada de retorno son un aspecto crucial de Javascript, ya que desempeñan un papel fundamental en la programación asíncrona. Comprender sus características puede ofrecerte una visión profunda del funcionamiento de Javascript, convirtiéndote en un mejor desarrollador.
Atributos críticos de las funciones de llamada de retorno de Javascript
Las funciones de llamada de retorno en Javascript están dotadas de varios atributos únicos que contribuyen a su naturaleza flexible. Profundicemos en estas características:
1. Funciones de primera clase: En Javascript, las funciones se consideran ciudadanos de primera clase. Esto significa que, al igual que otros objetos como cadenas o números, puedes pasar funciones como parámetros a otras funciones, devolverlas desde otras funciones o asignarlas a variables.
He aquí un ejemplo de una función de devolución de llamada pasada como argumento:
function saludo(nombre) { alerta('Hola ' + nombre); } function procesarEntradaDelUsuario(callback) { var nombre = prompt('Introduce tu nombre.'); callback(nombre); } procesarEntradaDelUsuario(saludo);En este ejemplo, la función 'procesarEntradaDelUsuario' recibe un parámetro, que es una función. Tras recoger la entrada del usuario, llama a la función de devolución de llamada con el nombre del usuario como argumento.
2. Funciones de orden superior: Otra característica clave es que las funciones de llamada de retorno suelen estar asociadas a "Funciones de Orden Superior". Una función de orden superior es una función que toma al menos una función como parámetro y/o devuelve una función.
Un uso común de las funciones de orden superior en Javascript son los métodos de array como forEach(), map(), filter() y reduce().
var numerals = [5, 7,13, 2]; numerals.forEach(function(n) { console.log((n>}
); 'forEach()' aquí es una función de orden superior que toma una función de devolución de llamada como argumento y la aplica a cada elemento de la matriz.
3. Ejecución asíncrona: Las funciones de llamada de retorno facilitan la programación asíncrona en Javascript. En otras palabras, las funciones de llamada de retorno permiten al navegador seguir procesando otras líneas de tu código sin esperar a que se completen tareas largas, como llamadas a la API, o temporizadores.
Interpretar el impacto de las características de las funciones de llamada de retorno de Javascript
Desempaquetar el impacto de estas características puede iluminar el papel utilitario de las funciones de llamada de retorno de Javascript en tus aplicaciones.
La naturaleza de primera clase de las funciones Javascript abre todo un espectro de paradigmas de programación. Permite estructuras de código flexibles, simplificando así la base de código y optimizando la velocidad de ejecución del código. Hace que el lenguaje sea más expresivo, permitiendo a los desarrolladores realizar operaciones complejas de forma concisa.
El concepto de funciones de orden superior es un testimonio de la potencia de Javascript. Permite a los desarrolladores crear fábricas de funciones, vincular contextos a funciones y construir potentes abstracciones. Con él, los desarrolladores pueden encapsular operaciones (instrucciones) en un conjunto de funciones autocontenido que facilita el razonamiento sobre lo que hace el código. Esto mejora enormemente la legibilidad de tu código.
La ejecución asíncrona es otra piedra angular de Javascript, crucial para crear sitios web interactivos. El uso de funciones de devolución de llamada para gestionar tareas asíncronas significa que, mientras esperas a que se complete una operación, tu motor Javascript puede procesar otras tareas. Esta capacidad es especialmente crucial para gestionar tareas como entradas de usuario, llamadas a la API, peticiones a la base de datos, etc. Además de mejorar la UX, ayuda a optimizar tu código y a evitar el bloqueo del bucle de eventos.
Comprender estas características y su impacto no sólo te convertirá en un desarrollador más competente, sino que también te guiará para escribir un código Javascript eficiente, más limpio y más moderno.
Llamada de retorno síncrona vs. asíncrona en Javascript: Una comparación
Los modelos de funcionamiento Síncrono y Asíncrono tienen consecuencias significativas sobre cómo escribes código en Javascript. Tienen un impacto directo en el rendimiento, la mantenibilidad y el flujo de control de tu código. Aquí desmitificaremos estos conceptos y te ayudaremos a entender sus diferencias, junto con sus ventajas e inconvenientes.
Comprender la devolución de llamada síncrona en Javascript
En el modelo Síncrono de devolución de llamada en Javascript, las operaciones se ejecutan una tras otra. Esto significa que una operación concreta tiene que terminar antes de que empiece la siguiente.
Esta ejecución secuencial de las operaciones hace que el flujo de control sea muy fácil de entender, ya que el orden de ejecución de las operaciones se corresponde con el orden en que se codifican las operaciones.
Por ejemplo, considera el siguiente fragmento de código en Javascript:
console.log('Primera operación'); console.log('Segunda operación'); console.log('Tercera operación');
La salida será
Primera Operación Segunda Operación Tercera Operación
Esto se debe a que el motor Javascript ejecuta la sentencia console.log para la 'Primera Operación' antes de pasar a la 'Segunda Operación' y así sucesivamente.
Aunque esto pueda parecer ideal, las cosas toman otro cariz cuando entran en juego operaciones que consumen un tiempo considerable, como las solicitudes de red o la E/S de archivos. En estos casos, toda la aplicación tiene que esperar a que se completen estas operaciones. Esto puede dar lugar a una experiencia de usuario indeseable, ya que la interfaz de usuario puede quedar paralizada, haciendo que parezca congelada.
Cómo aprovechar la devolución de llamada asíncrona en Javascript
Para superar las limitaciones que plantea el modelo de ejecución síncrono, Javascript proporciona un modelo asíncrono. En este modelo, las operaciones que consumen tiempo pueden iniciarse y luego dejarse de lado. El navegador puede entonces continuar ejecutando otras operaciones en el script. Cuando se completa la operación que consume tiempo, una función de devolución de llamada asociada a ella se coloca en una cola, conocida como Cola de Eventos.
Un componente especial conocido como Bucle de Eventos comprueba constantemente la pila de llamadas y la cola de eventos en secuencia. Si la pila de llamadas está vacía, toma el primer evento de la cola y lo introduce en la pila de llamadas. Así comienza la ejecución de la función de llamada de retorno correspondiente. El punto crucial a tener en cuenta aquí es que Javascript, al ser monohilo, sólo puede hacer una cosa a la vez.
function descargarArchivo(url, descargado) { // aquí estamos iniciando una operación asíncrona. console.log(`Descargando archivo de: ${url}`); setTimeout(function() { let filePath = "disco duro:\\" + url.split('/').pop(); console.log(`El archivo se ha descargado en ${rutaDeArchivo}`); downloaded(rutaDeArchivo); }, 3000); } downloadFile('http://example.com/file.txt', function(ruta) { console.log(`Procesando el archivo ubicado en ${ruta}`); }); console.log("Otra operación no relacionada");
En este ejemplo, la función downloadFile inicia una operación de descarga, simulada por la función setTimeout, y luego vuelve inmediatamente. La función anónima de devolución de llamada se invoca después de 3000 milisegundos. La sentencia final console.log no tiene que esperar a que se complete la descarga, lo que demuestra que las operaciones posteriores pueden mantener su progreso mientras esperan a que se completen las operaciones asíncronas.
Contraste entre devolución de llamada síncrona y asíncrona en Javascript
A estas alturas, ya entiendes que los modelos Síncrono y Asíncrono en Javascript determinan cuándo se ejecuta un determinado fragmento de código. En una devolución de llamada síncrona, las operaciones se realizan de una en una y en el orden en que aparecen en el código, creando un escenario de bloqueo mediante un mecanismo comúnmente denominado "E/S de bloqueo".
En cambio, una llamada de retorno asíncrona permite a Javascript ejecutar operaciones de forma concurrente. Este modelo ayuda a Javascript a manejar operaciones pesadas, como la E/S de archivos o las peticiones de red, sin interrumpir el flujo principal del programa.
La característica distintiva entre ambas reside en la forma en que gestionan la ejecución de las funciones: mientras que las retrollamadas síncronas retrasan la ejecución de la función siguiente hasta que finalice la operación actual, las retrollamadas asíncronas ejecutarán la función siguiente mientras esperan a que finalicen otras operaciones. Esta diferencia fundamental sienta las bases de cómo Javascript puede gestionar múltiples operaciones al mismo tiempo, a pesar de ser un lenguaje monohilo.
En resumen, éstas son las principales diferencias entre las retrollamadas síncronas y asíncronas:
Parámetro | Sincrónica | Asíncrono |
Ejecución | Secuencial, bloqueante | Concurrente, no bloqueante |
Complejidad | Menor complejidad debido al flujo de control lineal | Mayor complejidad debido a la gestión de las llamadas de retorno |
Caso práctico | Adecuado para tareas sencillas e insensibles al tiempo | Perfecto para operaciones pesadas de E/S |
La elección entre los modelos síncrono y asíncrono depende finalmente de tus requisitos específicos, ya que cada uno tiene sus propios puntos fuertes y débiles. Sin embargo, la capacidad del modelo asíncrono para mantener el progreso incluso durante operaciones pesadas de E/S lo hace crucial para las aplicaciones web interactivas.
Funciones de devolución de llamada de Javascript - Puntos clave
- Funciones Callback de Javascript: Funciones que se pasan como argumentos y se ejecutan una vez que la función principal ha completado su ejecución.
- Pasos principales en la ejecución de una función de devolución de llamada: Comienza la función principal, llama a una operación asíncrona, espera a que se complete y, a continuación, activa la función de devolución de llamada con los resultados.
- Ejemplo de función de devolución de llamada en Javascript: Un ejemplo sencillo muestra cómo las funciones pueden convertirse en parámetros de otras funciones y ser invocadas dentro de esa función.
- Funciones de Llamada de Retorno Anónimas: Son funciones que se utilizan sin darles un nombre ni asignarlas a una variable, normalmente se pasan directamente como argumento a otras funciones.
- Características de las funciones de llamada de retorno de JavaScript: Las funciones son ciudadanos de primera clase que pueden pasarse como parámetros y devolverse desde funciones; permiten la programación asíncrona, permitiendo que otras líneas de código sigan procesando sin esperar a que se completen tareas largas.
- Llamada de retorno síncrona vs. asíncrona en Javascript: La ejecución síncrona requiere que cada operación se complete antes de pasar a la siguiente, mientras que la ejecución asíncrona permite iniciar operaciones y dejarlas a un lado hasta que se completen.
Aprende con 15 tarjetas de Funciones de Retorno en Javascript en la aplicación StudySmarter gratis
¿Ya tienes una cuenta? Iniciar sesión
Preguntas frecuentes sobre Funciones de Retorno en Javascript
Acerca de StudySmarter
StudySmarter es una compañía de tecnología educativa reconocida a nivel mundial, que ofrece una plataforma de aprendizaje integral diseñada para estudiantes de todas las edades y niveles educativos. Nuestra plataforma proporciona apoyo en el aprendizaje para una amplia gama de asignaturas, incluidas las STEM, Ciencias Sociales e Idiomas, y también ayuda a los estudiantes a dominar con éxito diversos exámenes y pruebas en todo el mundo, como GCSE, A Level, SAT, ACT, Abitur y más. Ofrecemos una extensa biblioteca de materiales de aprendizaje, incluidas tarjetas didácticas interactivas, soluciones completas de libros de texto y explicaciones detalladas. La tecnología avanzada y las herramientas que proporcionamos ayudan a los estudiantes a crear sus propios materiales de aprendizaje. El contenido de StudySmarter no solo es verificado por expertos, sino que también se actualiza regularmente para garantizar su precisión y relevancia.
Aprende más