Funciones flecha y enlace léxico

Clase 25 de 80Curso de JavaScript Desde Cero

Contenido del curso

Primeros Pasos

Funciones y This

Resumen

¿Qué son las funciones tradicionales y cuándo se usan?

Para entender las arrow functions, es fundamental recordar las funciones tradicionales, aquellas que se suelen enseñar al inicio de cualquier curso de programación. Estas funciones se caracterizan por tener un nombre, parámetros, un cuerpo de ejecución y un llamado, todo estructurado bajo la palabra clave function. Son útiles y muy comunes, pero pueden llegar a ser extensas y, en contextos donde el manejo del this es relevante, se tornan complejas.

¿Cuál es la necesidad de las arrow functions?

Las arrow functions surgieron para ofrecer soluciones más concisas y manejables en algunos contextos importantes. Dos son las principales razones de su existencia:

  1. Sintaxis más corta: Las arrow functions eliminan la necesidad de la palabra function y hacen uso de una flecha (=>) para indicar el cuerpo de ejecución.
  2. Lexical binding: Estas funciones no generan su propio contexto de this, lo cual puede simplificar ciertos manejos contextuales.

¿Cómo se implementan las arrow functions?

Veamos cómo convertir una función tradicional en una arrow function:

// Función tradicional const saludo = function(nombre) { return `Hola, ${nombre}`; }; // Uso de arrow function const newGreeting = (nombre) => `Hola, ${nombre}`;

¿Cómo simplificar further las arrow functions?

Las arrow functions permiten incluso mayor simplificación con un retorno implícito y eliminación de paréntesis cuando hay un solo parámetro.

// Con retorno implícito const implicitGreeting = nombre => `Hola, ${nombre}`;

Si se manejan múltiples parámetros, los paréntesis no son opcionales:

const saludoCompleto = (nombre, apellido) => `Hola, yo soy ${nombre} ${apellido}`;

¿Qué diferencias hay en el lexical binding?

La gestión del this es particularmente notable al comparar funciones tradicionales y arrow functions. Las funciones tradicionales capturan el contexto durante su ejecución, mientras que las arrow functions utilizan el contexto léxico en el que fueron definidas.

Ejemplo práctico del lexical binding

const fictionalCharacter = { name: 'Uncle Ben', messageTraditional: function(message) { console.log(`${this.name} dice: ${message}`); }, messageArrow: (message) => { console.log(`${this.name} dice: ${message}`); } }; // Resultados esperados fictionalCharacter.messageTraditional('Un gran poder conlleva una gran responsabilidad.'); // Uncle Ben dice: Un gran poder conlleva una gran responsabilidad. fictionalCharacter.messageArrow('Cuidado con el doctor octopus.'); // undefined dice: Cuidado con el doctor octopus.

El uso de this en una arrow function no se refiere al objeto fictionalCharacter, sino al contexto más amplio en el que se encuentra esta función.

¿Qué soluciones hay para evitar errores comunes?

Al trabajar con inglés y otras herramientas, es fácil cometer errores tipográficos. Para esto, es útil usar extensiones que realicen revisiones automáticas, disminuyendo así errores fastidiosos. La consistencia y claridad en el código no solo mejoran la calidad, sino que también reducen tiempos de revisión y depuración.

Finalmente, te invitamos a practicar estos conceptos. Cuéntanos: ¿prefieres utilizar funciones tradicionales o arrow functions, y por qué?