W3docs

Conceitos Básicos de Arrow Functions em JavaScript

Aprenda arrow functions em JavaScript: sintaxe ES6, retornos implícitos, parâmetros simples e múltiplos, retorno de objetos e herança de this do escopo.

Introdução às Arrow Functions

As arrow functions, introduzidas no ES6 (ECMAScript 2015), são uma forma concisa de escrever expressões de função em JavaScript. Elas são especialmente úteis para funções curtas e são usadas em toda parte em bibliotecas e aplicações modernas de JavaScript — particularmente como callbacks passados para métodos de array, timers e manipuladores de eventos.

Uma arrow function é mais do que apenas uma sintaxe mais curta. Ela também se comporta de forma diferente de uma função regular em um aspecto importante: ela não cria seu próprio this. Esta página aborda a sintaxe e o comportamento de this; para casos extremos avançados (sem arguments, sem new, sem generators), veja Arrow functions, revisitadas.

Sintaxe Básica

A forma geral de uma arrow function é:

let functionName = (param1, param2, ..., paramN) => expression;

Isso cria uma função que recebe param1, param2, ..., paramN como parâmetros e retorna o resultado de expression. O token => é lido como "vai para" ou simplesmente "flecha".

A expressão de função tradicional equivalente tem esta aparência — comparar as duas lado a lado mostra o que a sintaxe de flecha omite:

javascript— editable

A versão com flecha remove a palavra-chave function, as chaves e o return explícito. O resultado é o mesmo.

Arrow Functions de Uma Linha (Retorno Implícito)

Quando o corpo é uma única expressão, você pode omitir as chaves e a palavra-chave return. O valor da expressão é retornado automaticamente — isso é chamado de retorno implícito:

javascript— editable

Arrow Functions de Múltiplas Linhas (Retorno Explícito)

Se o corpo precisar de mais de uma instrução, envolva-o em chaves {}. Ao usar chaves, o retorno implícito desaparece, então você deve escrever return explicitamente se quiser retornar um valor:

javascript— editable

Esquecer o return dentro das chaves é um erro comum para iniciantes: a função então retorna undefined.

Regras dos Parênteses

Os parênteses em torno dos parâmetros seguem regras simples:

  • Um parâmetro: parênteses são opcionais — x => x * 2.
  • Nenhum parâmetro: parênteses vazios são obrigatórios — () => 42.
  • Dois ou mais parâmetros: parênteses são obrigatórios — (a, b) => a + b.
javascript— editable

Retornando um Objeto Literal

Para retornar um object com a sintaxe de retorno implícito, envolva o object em parênteses. Sem eles, o JavaScript lê o { como o início de um corpo de função, não de um object literal — então o corpo da função apenas executa e retorna undefined:

javascript— editable

Vantagens das Arrow Functions

  1. Concisão — Arrow functions têm uma sintaxe mais curta comparada às expressões de função tradicionais, o que mantém os callbacks legíveis.
  2. this léxico — Arrow functions não têm seu próprio this. Elas obtêm this do escopo circundante (pai), o que elimina toda uma classe de bugs relacionados à perda de this em callbacks.
  3. Retornos implícitos — Com a sintaxe de uma linha, o return é automático, tornando transformações curtas mais limpas.

Como this Funciona nas Arrow Functions

Esta é a diferença mais importante entre arrow functions e funções regulares. Uma função regular obtém seu próprio this, determinado por como ela é chamada. Uma arrow function não tem this próprio — ela busca this no escopo onde foi definida. Isso é conhecido como this léxico.

O problema clássico aparece dentro de um método que agenda um callback. Com uma função regular, o this do callback é perdido; com uma arrow function, this é herdado:

javascript— editable

Como a arrow function captura this de startArrow (onde this é o object counter), ela lê corretamente this.value. A função regular dentro de setTimeout é chamada sem contexto de object, então seu this.value é undefined. Para uma análise mais aprofundada de como this é determinado em métodos regulares, veja Métodos de objeto, "this".

Limitações das Arrow Functions

As arrow functions não são um substituto universal para toda função. O this léxico é exatamente o que as torna inadequadas em alguns contextos.

  1. Não são ideais como métodos de object — Como uma arrow function herda this do escopo circundante em vez do object em que é chamada, usá-la como método geralmente não produz o resultado esperado.
  2. Não podem ser construtoras — Arrow functions não podem ser usadas com new e lançam um erro se você tentar; elas não são construtoras.
  3. Sem object arguments próprio — Dentro de uma arrow function, arguments refere-se ao escopo externo, não aos argumentos passados para a arrow function em si. Use parâmetros rest (...args) em vez disso.

O problema com métodos na prática — this não aponta para o object:

javascript— editable

Quando Usar Cada Uma

  • Prefira uma arrow function para callbacks curtos: métodos de array, promises, timers e manipuladores de eventos onde você quer manter o this circundante.
  • Prefira uma função regular quando precisar de um método que usa this para referenciar seu próprio object, uma construtora ou acesso ao object arguments.

Exemplos Práticos

Métodos de Array

Arrow functions se destacam com métodos de array como map, filter e reduce, onde cada chamada é uma pequena transformação:

javascript— editable

Ouvintes de Eventos

Arrow functions são convenientes para ouvintes de eventos, especialmente dentro de uma classe ou object onde você quer que this continue apontando para a instância circundante (este exemplo usa o navegador, portanto execute-o em uma página em vez do console):

document.getElementById("myButton").addEventListener("click", () => {
  console.log("Button clicked!");
});

Callbacks e Promises

Elas mantêm o código assíncrono compacto quando usadas como callbacks:

javascript— editable

Conclusão

Arrow functions são um recurso versátil e cotidiano do JavaScript moderno. Elas fornecem uma sintaxe concisa, suportam retornos implícitos para corpos de uma linha e — mais importante — herdam this do escopo circundante, o que evita bugs comuns de contexto em callbacks. São ideais para métodos de array, promises e manipuladores de eventos, mas não para métodos de object que dependem do próprio this, construtoras ou código que precisa do object arguments. Saber quando cada tipo de função é adequado é a chave para usá-las bem. Continue com Arrow functions, revisitadas para os casos extremos restantes.

Prática

Prática
Quais são algumas características das Arrow Functions em JavaScript?
Quais são algumas características das Arrow Functions em JavaScript?
Was this page helpful?