🧠 Principais Tópicos
Hoisting
- O JavaScript puxa declarações para o topo do escopo antes da execução.
var se torna undefined, enquanto let e const ficam em uma "zona morta" até a declaração.
Escopo
- Tipos de escopo: global, função e bloco.
var tem escopo de função, enquanto let e const respeitam o escopo de bloco.
Closures
- Funções que lembram as variáveis do escopo onde foram criadas.
- Podem causar problemas de memória se não forem gerenciadas corretamente.
Event Loop
- JavaScript é single-threaded, mas pode lidar com operações assíncronas através do event loop.
- Prioriza microtasks (como promises) sobre macrotasks (como setTimeout).
Promises
- Representam resultados futuros com três estados: pendente, cumprido e rejeitado.
- Permitem encadeamento e tratamento de erros de forma mais limpa que callbacks.
Garbage Collection
- O JavaScript gerencia a memória automaticamente, mas é importante evitar vazamentos de memória.
- Conceito de "alcançabilidade" determina se um objeto pode ser coletado.
Tratamento de Erros
- Uso de
try, catch e finally para gerenciar erros. - Criação de erros personalizados e tratamento de diferentes tipos de erros.
📚 Principais Lições
- Entender o Hoisting e EscopoSaber como as variáveis são tratadas no JavaScript é crucial para evitar bugs.
- Utilizar Closures com CuidadoElas são poderosas, mas podem causar vazamentos de memória se não forem geridas corretamente.
- Dominar o Event LoopCompreender como o JavaScript lida com operações assíncronas é fundamental para escrever código eficiente.
- Adotar Promises e Async/AwaitElas simplificam o código assíncrono e melhoram a legibilidade.
- Gerenciar MemóriaConhecer como funciona a coleta de lixo ajuda a evitar problemas de desempenho.
- Tratar Erros de Forma EficienteUm bom tratamento de erros pode evitar que um aplicativo falhe completamente.
🏁 Conclusão
Compreender esses conceitos interconectados é essencial para qualquer desenvolvedor JavaScript. Eles não apenas ajudam a resolver problemas comuns, mas também fornecem uma base sólida para escrever código mais eficiente e robusto.