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.
cria dobrar = (x) => x * 2
cria somar = (a, b) => { volta a + b }
grita-ae(dobrar(21)) // 42Por 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:
// 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:
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()) // 3Por 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.