Como se preparar para uma entrevista de JavaScript: guia completo
\n\nA entrevista de JavaScript não é um exame escolar onde você só precisa decorar respostas. É uma conversa onde testam não apenas seu conhecimento de sintaxe, mas também sua capacidade de pensar, entender os mecanismos da linguagem e resolver problemas reais. Se você sente que está "perdido" em closures, confunde this e tem medo do event loop — não se preocupe. Preparamos um guia estruturado que ajudará você a passar com confiança na entrevista de JavaScript.
Por que é tão difícil se preparar para uma entrevista de JS?
\n\nJavaScript é uma linguagem com alma (e às vezes com surpresas). Uma mesma função pode se comportar de forma diferente dependendo do contexto. Por isso, na entrevista de JavaScript, não apenas perguntam "o que o código exibe" — pedem que você explique por quê. E é aí que muitos falham. Mas vamos ensinar você a identificar essas armadilhas.
\n\n1. Fundamentos que você precisa saber de cor
\n\nTipos de dados e coerção de tipos
\n\nVamos começar pela base. Em JavaScript, existem 7 tipos primitivos: string, number, boolean, null, undefined, symbol, bigint — e um complexo: object. Mas o truque é que typeof null retorna "object" — isso é um erro histórico que você precisa saber.
Em entrevistas de JavaScript, adoram perguntar sobre coerção implícita de tipos. Por exemplo:
\n\nconsole.log([] + []); // ""\nconsole.log([] + {}); // "[object Object]"\nconsole.log({} + []); // 0 (no console do navegador)\n\n\nPor que isso acontece? Porque o operador + tenta converter os operandos para primitivos, chamando toString() ou valueOf(). Lembre-se: um array vazio se transforma em string vazia, e um objeto se transforma na string "[object Object]".
Closures e escopo léxico
\n\nEste é um dos tópicos mais comuns em entrevistas de JavaScript. Closure é uma função que "lembra" as variáveis do seu escopo externo mesmo após a função externa ter terminado sua execução.
\n\nfunction createCounter() {\n let count = 0;\n return function() {\n count++;\n return count;\n };\n}\n\nconst counter = createCounter();\nconsole.log(counter()); // 1\nconsole.log(counter()); // 2\n\nNa entrevista, podem pedir para você escrever uma função semelhante ou explicar por que no loop com var surge o problema clássico:
for (var i = 0; i < 5; i++) {\n setTimeout(() => console.log(i), 1000);\n}\n// Exibe 5, 5, 5, 5, 5\n\nA solução é usar let ou envolver em uma closure. Explique que var tem escopo de função, e não de bloco.
2. "This" — a dor e a alegria de todo desenvolvedor JS
\n\nPerguntas sobre this são clássicas. A regra é simples: o valor de this é determinado por como a função é chamada, não onde ela é declarada.
- \n
- No contexto global (no navegador),
thiséwindow. \n - Em um método de objeto, é o próprio objeto. \n
- Em uma função construtora, é a nova instância. \n
- Em uma arrow function,
thisvem do escopo léxico externo. \n
Exemplo para entrevista:
\n\nconst obj = {\n name: "JS",\n getName: function() {\n return this.name;\n }\n};\n\nconst fn = obj.getName;\nconsole.log(fn()); // undefined (contexto perdido)\n\nComo corrigir? Usar bind, call, apply ou uma arrow function.
3. Event Loop e assincronicidade — tópico para estrelas
\n\nSem entender o event loop, você não passará em uma entrevista de JavaScript de nível intermediário. Lembre-se da sequência: primeiro, todo o código síncrono é executado (pi