arrow_back Voltar ao curso

Arrow Functions e Closures

Fundamentos do XanaScript • Aula 13 de 20

Arrow functions são a forma curta de escrever funções. Ótimas pra funções pequenas e pra callbacks.

js
cria dobrar = (x) => x * 2
cria somar = (a, b) => { volta a + b }

grita-ae(dobrar(21))  // 42

Por que duas formas?

O resolve é pra funções nomeadas e com corpo (a "norma"). A arrow é pra funções descartáveis — aquelas que você passa direto como argumento:

js
// Sem arrow, o handler seria uma função inteira nomeada
escuta(3000, (req, res) => res.enviar("olá"))

Closures — a função que "lembra"

Uma closure é uma função que captura variáveis do lugar onde nasceu, mesmo depois desse lugar terminar:

js
resolve criarContador() {
  cria count = 0
  volta () => {
    count = count + 1
    volta count
  }
}

cria c = criarContador()
grita-ae(c())  // 1
grita-ae(c())  // 2
grita-ae(c())  // 3

Por que a closure funciona?

Quando criarContador termina, a variável count deveria sumir. Mas a arrow interna segurou uma referência a ela. Cada chamada a c mexe no MESMO count — por isso ele sobe 1, 2, 3. Cada chamada a criarContador() cria um contador independente.

Aplicação real de closures

O exemplo mais comum: estado privado — dados que só a função conhece. É o embrião de objetos e de contadores de tentativas, caches, geradores.

Comentários