Junior
¿Cuál es la diferencia entre una función clásica y una función de flecha en JavaScript?
sobes.tech AI
Respuesta de la IA
La principal diferencia radica en cómo trabajan con this.
Una función clásica tiene su propio this, que se determina por el contexto en el que se llama (cómo fue invocada).
Una función flecha no tiene su propio this. Hereda this léxicamente del entorno en el que fue definida.
Otras diferencias:
- Objeto
arguments: Las funciones clásicas tienen acceso al objetoarguments, las flechas no (pero se pueden usar parámetros rest). - Constructores: Las funciones clásicas pueden usarse como constructores con el operador
new. Las flechas, no. - Propiedad
prototype: Las funciones clásicas tienen la propiedadprototype. Las flechas, no.
Ejemplo de uso de this:
// Ejemplo con función clásica
const obj = {
name: 'Objeto',
greet: function() {
console.log(this.name); // this hace referencia a obj
}
};
obj.greet(); // Imprime: Objeto
const greetFunc = obj.greet;
greetFunc(); // Imprime: undefined (o Window en navegador) - this pierde el contexto de obj
// Ejemplo con función flecha
const objArrow = {
name: 'Objeto con flecha',
greet: () => {
console.log(this.name); // this hereda el contexto externo (en este caso global o Window)
}
};
objArrow.greet(); // Imprime: undefined (o el nombre de la ventana en navegador, si name está definido globalmente)
const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Imprime: undefined (o el nombre de la ventana en navegador) - this no cambia