Duda JS con funciones flecha

pantocreitor

Estoy haciendo una práctica y llegado x punto estaba liado con una función a la cual se le pasan 2 fechas y me devuelve un listado de compras, la cual está compuesta por las clases cliente y vehículo y los atributos importe y fecha.

He estado un rato largo mirando por qué me salía el típico fallo de noob de uncaught type error undefined pero no daba con la tecla.
En este listado se llamaba a una función de busqueda y era esta la que me tiraba el error.

El tema ha sido que un compañero me ha comentado que lo cambiase a función flecha una función hecha de la manera clásica y ha empezado a funcionar bien, pero no ha sabido explicarme por qué.

Cómo este tipo de cosas no pasan por obra y gracia del espíritu santo estoy con la duda de que diferencia hay entre el acceso de una función clásica y una función flecha para que con el mismo código una me diga que la función a la que llamo es undefined y y la otra esté bien.

spoiler
Nedaim

Es porque las funciones de flecha tienen el mismo contexto que el lugar en el que se definen. Tu variable estaba declarada fuera de la declaración de la función y por tanto no existía en ella. Mirate esto:
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Function/bind

Para que te hagas una idea te pongo un ejemplo:

(args)=>{[code]}

Es equivalente a:

(function (args){[code]}).bind(this)

No es algo intuitivo de entender e igual no lo he explicado de la mejor manera así que si tienes alguna duda pregunta.

1 1 respuesta
pantocreitor

#2 Voy a echar un ojo a ver si lo pillo, porque e estado buscando info pero cuando parece que lo tengo claro... NOPE xD

ReloaD1010

Es normal que te líes porque en JS el tema de los objetos y closures tiene su gracia, y viendo las clases y tal como por ejemplo en Java pues es normal haber hecho suposiciones.
Como lo entendí yo en su momento es que cuando usas una arrow function, todo lo que tenías en this fuera lo pasabas al this dentro de la función. Es muy de ir por casa pero a partir de ahí pude seguir investigando.

Si tienes alguna duda concreta en alguna línea, pregunta.

Usuarios habituales

  • ReloaD1010
  • pantocreitor
  • Nedaim