linguagem
JavaScript
JavaScript em entrevista raramente é sobre framework. É sobre os cantos da linguagem que quebram código em produção: hoisting e a temporal dead zone, o valor de `this`, coerção de tipo, closures e a ordem exata entre callback, microtask e macrotask no event loop.
Simulador de JavaScript
Tópicos por senioridade
Desafios práticos
Cenários reais pra resolver em voz alta, como numa entrevista de verdade — não é múltipla escolha.
- Cenário: prever a ordem de saída com setTimeout e Promise
No trecho: `console.log(1); setTimeout(() => console.log(2), 0); Promise.resolve().then(() => console.log(3)); console.log(4);` — qual a ordem de saída e por quê?
Perguntas mais cobradas
ver todas →- Fácil
Hoisting: var, let e a temporal dead zone
var é içada como undefined; let/const ficam na TDZ (ReferenceError até a declaração); function declarations são içadas inteiras.
- Médio
O valor de `this` em JavaScript
`this` numa função normal depende de como ela é chamada (método, solta, call/bind, new). Arrow function herda o `this` léxico.
- Difícil
Cenário: prever a ordem de saída com setTimeout e Promise
1, 4, 3, 2 — síncrono primeiro; depois toda a fila de microtasks (Promise) antes de qualquer macrotask (setTimeout).
- Fácil
`==` x `===` e coerção de tipo
`===` compara valor e tipo sem converter; `==` converte antes, com regras que geram bugs (`'' == 0`, `[] == ''`). Use `===`; o único `==` ok é `x == null` (pega null e undefined).
- Fácil
map/filter/reduce x for, e mutação
map/filter/reduce: intenção clara, retorna novo (imutável). for: precisa de break/continue, efeito colateral, ou não encaixa. Cuidado: sort/reverse/splice/push MUTAM — use toSorted/toReversed/slice.
- Médio
Cópia rasa: spread, Object.assign e o objeto aninhado
Spread/Object.assign copiam só o primeiro nível; aninhados continuam compartilhando referência. Profundo: `structuredClone` (nativo), JSON round-trip (com perdas), ou recriar só o caminho que muda.