A Arrow function é um recurso que foi introduzido no ES6. É uma maneira mais concisa de escrever expressões de função e funciona de maneira semelhante às funções regulares, mas com certas diferenças.
let somar = function(n1, n2){
return n1 + n2;
}
// Utilizando arrow functions =>
let somar = (n1, n2) => { return n1 + n2 };
O arrow function permite ao desenvolvedor alcançar o mesmo resultado simplificando o seu código. Os colchetes se tornam desnecessários se apenas uma expressão seja realizada:
let somar = (n1, n2) => n1 + n2;
Se houver apenas um argumento na função, os parênteses tornam-se desnecessários:
let multiplicaQuadrado = x =:> x * x;
E, caso não existam argumentos:
let dizerOla = _ => console.log("Olá");
As arrow functions têm acesso ao objeto de argumentos da função pai regular mais próxima. Os parâmetros nomeados e restantes são muito utilizados para capturar argumentos passados para arrow functions:
// Em uma função regular
let minhaFuncao = {
mostrarArgumentos(){
console.log(argumentos);
}
};
minhaFuncao.mostrarArgumentos(1, 2, 3, 4);
// Utilizando arrow functions:
let minhaFuncao = {
mostrarArgumentos: () => {
console.log(...argumentos);
}
};
minhaFuncao.mostrarArgumentos(1, 2, 3, 4);
// Argumento is not defined
As funções de seta não tem as suas próprias THIS, sendo o contrário de uma expressão regular. O valor de this dentro de um arrow está sempre ligado ao valor de this na função pai regular que seja mais próxima.
let pessoa = {
nome: "Fulano Ciclano",
thisArrow: () => {
console.log("O nome é: " + this.nome); // Não há binding para this aqui
},
thisRegular(){
console.log("O nome é: " + this.nome); // O bind vai funcionar aqui
}
};
pessoa.thisArrow();
pessoa.thisRegular();
/* Saída */
//Meu nome é
//Meu nome é Fulano Ciclano
As funções regulares criadas utilizando declarações ou expressões de função são construtivas. Como elas são funções construtoras, elas podem ser invocadas utilizando a palavra-chave new.
As arrow functions não são construtivas, então, não podem ser chamadas utilizando a palavra-chave new:
let soma = (n1, n2) => console.log(n1 + n2);
new soma(2, 3);
/* Saída */
// soma is not a constructor
As funções de seta também não podem ter parâmetros nomeados duplicados, seja no modo estrito ou não. Isso significa que:
// Isso aqui é válido
function somar(x, x){
//...Seu código aqui
}
Mas ao utilizar o modo estrito, não é válido:
'use strict'
function somar(x, x) {}
// SyntaxError: duplicate formal argument x
Com as arrow functions, os argumentos duplicados serão sempre inválidos, independente de estar ou não em modo estrito:
(x, x) => {}
// SyntaxError: duplicate argument names not allowed in this context
Referência: https://medium.com/better-programming/difference-between-regular-functions-and-arrow-functions-f65639aba256
Gostou deste artigo? Comente abaixo e mostre para seus amigos!