Principais Assuntos que Causam Confusão nos Iniciantes em
JavaScript
1. Var, Let e Const
- 'var' tem escopo de função e sofre hoisting (é içada para o topo do escopo).
- 'let' e 'const' têm escopo de bloco e não podem ser acessadas antes da declaração.
- 'const' não permite reatribuição, mas objetos e arrays ainda podem ser modificados.
2. Tipagem Dinâmica
- JavaScript é fracamente tipado: variáveis podem mudar de tipo.
- Pode gerar confusão com operações como: '5' + 1 = '51' (concatenação).
- Use funções como typeof() para inspecionar tipos.
3. Coerção de Tipos
- Coerção implícita converte tipos automaticamente, o que pode gerar bugs.
- Comparações com '==' fazem coerção, enquanto '===' exige tipo e valor iguais.
4. Assíncronismo (Callbacks, Promises e Async/Await)
- JavaScript é assíncrono por padrão, usando event loop.
- Callbacks podem gerar 'callback hell'.
- Promises simplificam o controle de fluxo assíncrono.
- 'async/await' torna o código mais legível, mas deve ser usado com try/catch.
5. This e Contexto de Execução
- 'this' varia conforme o contexto de execução.
- Em métodos de objetos, 'this' refere-se ao objeto.
- Em funções normais, depende de como são chamadas.
- Arrow functions não têm seu próprio 'this'.
6. Escopo e Closures
- Escopo define onde uma variável pode ser acessada.
- Funções aninhadas têm acesso às variáveis de seus escopos pais.
- Closures ocorrem quando uma função lembra do escopo onde foi criada.
7. Hoisting
- Declarações de variáveis e funções são 'içadas' ao topo do escopo.
- 'var' é içada com valor undefined; 'let' e 'const' são içadas, mas não inicializadas.
8. Operadores Lógicos e Curto-Circuito
- Operadores como '&&' e '||' retornam o valor de uma das expressões.
- Útil para fornecer valores padrão, mas pode confundir se mal interpretado.
9. Manipulação de Objetos e Arrays
- Diferença entre cópia por valor e referência.
- Spread operator (...) e Object.assign() ajudam na clonagem.
- Métodos como map, filter e reduce são poderosos, mas requerem prática.
10. Funções de Alta Ordem
- Funções que recebem ou retornam outras funções.
- Base do paradigma funcional no JavaScript.
- Usadas em map, filter, reduce, etc.