Page cover

7.7.3 - Funções

🧠 Funções Ninja: Conceitos Avançados em JavaScript! 🥷

🧠 Funções Ninja: Conceitos Avançados em JavaScript! 🥷

Você já domina o básico, agora é hora de ir além! Vamos descobrir como funções podem se comportar de formas mais complexas (e super úteis) no JavaScript. Preparado para o próximo nível? ⚔️


😶 Funções anônimas

São funções sem nome. Muito usadas quando você não precisa reutilizar a função depois.

setTimeout(function() {
  console.log("Executando depois de 2 segundos");
}, 2000);

Também podem ser guardadas em variáveis:

const digaOi = function() {
  console.log("Oi!");
};

🧩 Funções dentro de funções

Sim, você pode declarar uma função dentro de outra!

function saudacao(nome) {
  function montarMensagem() {
    return "Olá, " + nome + "!";
  }

  return montarMensagem();
}

console.log(saudacao("Maya")); // Olá, Maya!

💡 Isso é útil para organizar tarefas e proteger variáveis do escopo externo.


🔐 Closures (fechamentos)

Closures são funções que lembram do lugar onde foram criadas. Elas "guardam" o escopo mesmo depois que a função externa acabou!

⚠️ Muito usado em funções que precisam guardar estado entre chamadas.


⬆️ Hoisting: puxando pra cima

Funções declaradas com function nome() são “elevadas” ao topo do código.

Mas expressões de função não são hoisted:


setTimeout e setInterval

setTimeout: executa depois de um tempo

setInterval: executa repetidamente

⚠️ Use com cuidado para evitar loops infinitos ou sobrecarga.


📞 Callback: passando funções como argumentos

Funções podem ser passadas como parâmetros para outras funções!

🔁 Muito usado em animações, interações com o usuário, e código assíncrono.


🔁 Recursão: quando a função chama ela mesma

⚠️ Use com condição de parada, senão o navegador pode travar 😅


📚 Funções já prontas (pré-definidas)

O JavaScript vem com várias funções embutidas:

Função
O que faz

parseInt()

Converte string em número inteiro

parseFloat()

Converte string em número com decimais

isNaN()

Verifica se algo não é número

setTimeout()

Executa depois de um tempo

setInterval()

Executa várias vezes com intervalo

alert()

Mostra mensagem na tela


🧱 Function constructor: use com cuidado!

Você pode criar funções com new Function(...), mas isso é raro e perigoso, porque executa código como texto (pode ser inseguro e difícil de debugar).

⚠️ Evite em código real! Só use se sabe exatamente o que está fazendo.


👜 Objeto arguments: acesso a todos os argumentos

Mesmo sem declarar parâmetros, você pode usar arguments para acessar todos os valores passados:

🧠 Hoje em dia, o ...rest é mais moderno e recomendado. Mas arguments ainda aparece em códigos antigos.


⚖️ Comparando formas de criar funções

Tipo
Exemplo
Características

Declaração

function f() {}

Hoisting, nome obrigatório

Expressão

const f = function() {}

Sem hoisting, função anônima

Arrow

const f = () => {}

Curta, não tem this próprio

Function constructor

new Function("x", "return x+1")

Evite! Executa strings como código


🧠 Dicas avançadas pra mandar bem:

  • Use arrow functions para funções pequenas e simples.

  • Use nomes claros para entender melhor seu próprio código no futuro.

  • Evite recursões profundas sem motivo — use com moderação.

  • Não abuse de funções dentro de funções, senão o código pode ficar confuso.

  • Evite o uso de Function() e arguments em projetos novos — existem formas mais modernas!


🧪 Desafio avançado:

  1. Crie uma função repetir que recebe uma função de callback e a quantidade de vezes que ela deve ser executada.

  2. Teste com um callback que imprime "Olá" no console.


🎯 Conclusão

Parabéns! 🎉 Agora você já tem uma visão poderosa do que funções podem fazer no JavaScript. Saber disso te permite criar, organizar e controlar tudo no seu código com mais confiança.

“Funções são como ferramentas mágicas: quando você entende cada tipo e como usá-las, o impossível vira possível!”

Atualizado