P
prepair.app
Começar entrevista →
EnglishУкраїнськаРусскийDeutsch
🟨

Middle JavaScriptPerguntas de entrevista JavaScript

Middle · 2–4 anos de experiência

As entrevistas de JavaScript se concentram em um pequeno número de coisas que a linguagem faz diferente de tudo mais: closures, `this`, protótipos e o event loop. Entenda bem isso e a maioria das outras perguntas se resolve sozinha. Aqui estão as mais frequentes, cada uma com uma resposta modelo. Middle: compreensão mais profunda, otimização e situações reais de trabalho.

Experimente — sem necessidade de conta
Preparando sua pergunta…

Temas para se preparar

Tipos e coerção
Closures e escopo
`this` e protótipos
O event loop e async
Promises e async/await
DOM, eventos e o navegador

6 perguntas de nível Middle com respostas

1

Dê um uso prático de um closure, e o bug clássico.

Resposta

Prático: um contador ou um cache onde o estado não deve ser alcançável de fora, uma função factory, ou qualquer coisa que precise lembrar um valor entre chamadas. O bug clássico é for (var i = 0; ...) setTimeout(() => console.log(i)) imprimindo o valor final toda vez, porque todos os callbacks fecham sobre um único binding. let cria um binding novo por iteração e resolve isso.

2

Como `this` é determinado, e o que o quebra?

Resposta

Quatro regras, em ordem de precedência: new, depois call/apply/bind explícitos, depois uma chamada de método onde this é o objeto antes do ponto, depois o padrão — undefined em modo estrito. Quebra quando um método é passado como callback, porque o ponto já não existe mais quando ele é chamado. As soluções são bind no ponto de passá-lo, um wrapper com arrow function, ou definir o método como campo de classe.

3

Qual é a diferença entre uma `class` e uma função construtora?

Resposta

Quase nenhuma em tempo de execução — class é sintaxe sobre o mesmo mecanismo de protótipos. As diferenças que importam: corpos de classe estão sempre em modo estrito, declarações de classe não são hoisted para uso, os métodos são não enumeráveis, e chamar uma classe sem new lança um erro em vez de fazer algo errado silenciosamente. extends e super são genuinamente mais fáceis do que cablear protótipos manualmente.

4

Qual é a ordem de saída aqui, e por quê?

Resposta

Dados um setTimeout(fn, 0) e um Promise.then já resolvido agendados no mesmo tick, o callback da promise roda primeiro. A razão é que depois que o script atual termina, a engine esvazia toda a fila de microtasks antes de pegar uma única macrotask da fila do timer. Daí se segue que uma microtask que agenda outra microtask pode bloquear a renderização indefinidamente, enquanto um setTimeout não pode.

5

Como você roda trabalho assíncrono em paralelo em vez de em sequência?

Resposta

await dentro de um loop é sequencial — cada iteração espera a anterior. Para rodar em paralelo, você inicia todas as promises primeiro e depois as espera juntas com Promise.all. Use allSettled quando uma falha parcial é aceitável, race para um timeout, any para o primeiro sucesso. Errar nisso transforma um request de 200 ms em 20 requests de 200 ms cada um.

6

O que causa vazamentos de memória no navegador e como você os encontra?

Resposta

Nós do DOM desconectados mas ainda referenciados por JavaScript, listeners nunca removidos, timers nunca limpos, e closures que retêm objetos grandes — mais caches que só crescem. Você os encontra tirando heap snapshots no DevTools antes e depois de uma ação repetida e comparando o que sobreviveu. WeakMap e WeakSet retêm chaves fracamente, por isso são a estrutura certa para associar dados a nós do DOM.

🦎

Só ler as respostas não basta

Numa entrevista de verdade você fala sob pressão. O Cam faz essas mesmas perguntas, avalia cada resposta e mostra exatamente o que melhorar.

Praticar entrevista de Middle JavaScript →
Grátis · 3 entrevistas por mês

Outros níveis — JavaScript

Junior JavaScriptSenior JavaScriptTodas as perguntas de JavaScript

Outras especializações

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend💎Middle Ruby on Rails🔷Middle C++⚛️Middle React Frontend