Table of contents
Las funciones
arrow
, oarrow functions
son una nueva forma de definir funciones.
Las funciones arrow
se introdujeron en ES6.
Las funciones arrow
nos permiten escribir una sintaxis de función más corta:
let myFunction = (a, b) => a * b;
Antes de arrow:
hello = function() {
return "Hola mundo";
}
Con una función arrow:
hello = () => {
return "Hola mundo";
}
Se hace más corto. Si la función tiene solo una declaración y la declaración devuelve un valor, puede eliminar los corchetes y la palabra clave return
:
Valor de retorno de las funciones arrow de forma predeterminada:
hello = () => "Hola mundo";
Nota: Esto sólo funciona si la función tiene una sola declaración.
Si tienes parámetros, los pasas dentro del paréntesis:
Funcion arrow con parametros:
hello = (val) => "Hola " + val;
De hecho, si solo tiene un parámetro, también puede omitir los paréntesis:
Funcion arrow sin parametros:
hello = val => "Hola " + val;
¿Qué pasa con this?
El manejo de this
también es diferente en las funciones arrow
en comparación con las funciones normales.
En resumen, con las funciones arrow
no hay ninguna vinculación.
En funciones normales, la palabra clave this
representaba el objeto que llamaba a la función, que podría ser window
, document
, button
o lo que sea.
Con funciones arrow
, la palabra clave this
siempre representa el objeto que definió la función arrow
.
Echemos un vistazo a dos ejemplos para comprender la diferencia.
Ambos ejemplos llaman a un método dos veces, primero cuando se carga la página y nuevamente cuando el usuario hace clic en un botón.
El primer ejemplo usa una función normal y el segundo ejemplo usa una función arrow
.
El resultado muestra que el primer ejemplo devuelve dos objetos diferentes (window
y button
), y el segundo ejemplo devuelve el objeto window
dos veces, porque el objeto window
es el "propietario" de la función.
Ejemplo:
Con una función normal, this
representa el objeto que llama a la función:
// Funcion regular:
hello = function() {
document.getElementById("demo").innerHTML += this;
}
// El objeto window llama a la funcion:
window.addEventListener("load", hello);
// Un objeto button llama a la funcion
document.getElementById("btn").addEventListener("click", hello);
Ejemplo:
Con una función arrow, this
representa el propietario de la función:
// Funcion Arrow:
hello = () => {
document.getElementById("demo").innerHTML += this;
}
// El objeto window llama a la funcion:
window.addEventListener("load", hello);
// Un objeto button llama a la funcion
document.getElementById("btn").addEventListener("click", hello);
Recuerde estas diferencias cuando trabaje con funciones. A veces, el comportamiento de las funciones regulares es lo que desea; si no, utilice funciones arrow
.
Soporte del navegador
La siguiente tabla define las primeras versiones del navegador con soporte completo para funciones de flecha en JavaScript:
Chrome | Edge | Firefox | Safari | Opera |
Chrome 45 | Edge 12 | Firefox 22 | Safari 10 | Opera 32 |
Sep, 2015 | Jul, 2015 | May, 2013 | Sep, 2016 | Sep, 2015 |
W3Schools es el sitio de desarrolladores web más grande del mundo.