JavaScript Arrow Function y Scopes
JavaScript Arrow Function y Scopes
El uso de JavaScript Arrow Function es cada día más habitual cuando programamos con
Javascript . ¿Para qué sirve un arrow function? . En principio muchos de nosotros
entendemos los arrows funcions como sintaxis sugar que nos ayuda a simplificar el como
trabajamos con JavaScript. Vamos a ver un ejemplo sencillo:
function sumar(a,b) {
return a+b;
return a-b;
}
console.log(sumar(2,2));
console.log(restar(2,2));
Acabamos de crearnos dos funciones muy sencillas para hacer dos operaciones básicas .Si
ejecutamos el programa por ejemplo desde la consola de node.js el resultado es trivial:
Podemos hacer algo similar utilizando javascript arrow function con lo cual el código queda
un poco más compacto y no hace falta declarar funciones . Algo como lo siguiente:
www.arquitecturajava.com
JavaScript Arrow Function y scopes
var suma=(a,b)=>;a+b;
var resta=(a,b)=>a-b;
console.log(suma(2,2));
console.log(resta(2,2));
<pre>
El resultado es el mismo solamente que usamos una sintaxis un poco más compacta ya que
las funciones flecha no han de ser declaradas con la palabra function y no necesitan incluir
sintaxis de return.
El resultado es idéntico . Ahora bien el concepto de JavaScript Arrow function aportan más
cosas. Supongamos que tenemos el siguiente código:
function sumar(a,b) {
return a+b;
return a-b;
}
www.arquitecturajava.com
JavaScript Arrow Function y scopes
function sumaLenta(a,b) {
this.numero1=a;
this.numero2=b;
setTimeout(function() {
console.log(sumar(this.numero1,this.numero2));
},1000)
sumaLenta(2,2);
En principio parece un código muy sencillo que almacena directamente los valores a, b en el
objeto this y luego simplemente invoca el método sumar dentro de un timeout con lo cual
tardamos un segundo en ejecutar el código . El mensaje será el mismo pero tardara un
segundo en presentar el resultado. Lamentablemente el resultado es diferente.
www.arquitecturajava.com
JavaScript Arrow Function y scopes
Esto hace que el operador this apunte a un nuevo scope vacío puede parecer algo trivial
pero siempre genera problemas y quebraderos de cabeza. ¿Cómo podemos solventar esto? .
Muy sencillo podemos cambiar la función que tenemos declarada en el setTimeout y
substituirla por una JavaScript Arrow Function que no genera nuevos scopes.
function sumaLenta(a,b) {
this.numero1=a;
this.numero2=b;
setTimeout(()=> {
console.log(sumar(this.numero1,this.numero2));
},1000)
www.arquitecturajava.com
JavaScript Arrow Function y scopes
Las arrow function heredan el scope de las funciones padres que las almacenan y por lo
tanto podremos acceder sin problema a los números y el programa volverá a funcionar.
Siempre que podamos optemos por usar arrow functions ya que evitan la generación de
ámbitos adicionales y simplifican las cosas.
www.arquitecturajava.com