En JavaScript tenemos dos formas principales de declarar funciones:
// Function clásica
function sumar(a, b) {
return a + b;
}
// Arrow function
const sumar = (a, b) => a + b;
Aunque pueden parecer equivalentes, tienen diferencias importantes:
this léxico:
- Function clásica: el this depende de cómo se invoque la función.
- Arrow function: el this se captura del contexto donde fue definida.
const obj = {
numero: 42,
funcionClasica: function() {
console.log(this.numero); // 42
},
arrowFunction: () => {
console.log(this.numero); // undefined (o distinto según el contexto externo)
}
}
Las arrow functions no tienen su propio this.
Las arrow functions no tienen arguments:
function funcionClasica() {
console.log(arguments);
}
const arrowFunction = () => {
console.log(arguments); // ReferenceError
}
Si necesitas los argumentos en arrow function, podés usar parámetros rest (...args).
Las arrow functions no pueden ser constructores:
No podés hacer new sobre una arrow function.
function Persona() {}
const PersonaArrow = () => {};
new Persona(); // OK
new PersonaArrow(); // TypeError
Las arrow functions no tienen prototype:
console.log(Persona.prototype); // {}
console.log(PersonaArrow.prototype); // undefined
Las arrow functions tienen una sintaxis más compacta. Ideal para callbacks, funciones de orden superior o programación funcional:
const numeros = [1, 2, 3];
const dobles = numeros.map(n => n * 2);
Hoisting:
- Las function declarations se elevan (hoisting).
- Las arrow functions (al ser expresiones) no:
sumar(2,3); // OK
function sumar(a,b){ return a + b; }
sumarArrow(2,3); // TypeError: sumarArrow is not a function
const sumarArrow = (a,b) => a + b;
Mejor en callbacks, no siempre en métodos:
Por su manejo de this, las arrow functions suelen ser preferidas en callbacks, pero no tanto para métodos de objetos o clases.
Regla rápida: usa arrow functions cuando quieras mantener el this del contexto externo (sobre todo en callbacks). Usa functions clásicas cuando necesites un constructor, arguments, o una función completamente autónoma.