Como passar em uma entrevista de JavaScript: principais perguntas de A a Z
A entrevista para a posição de desenvolvedor JavaScript não é apenas uma verificação de sintaxe. Os empregadores querem ver um profundo conhecimento da linguagem, suas peculiaridades e a capacidade de trabalhar com assincronia. Neste artigo, analisaremos os tópicos principais que o ajudarão a passar na entrevista com confiança. Abordaremos perguntas desde conceitos básicos até tópicos avançados de Node.js com exemplos reais de código.
1. Fundamentos: tipos de dados, hoisting e escopos
Vamos começar pelo básico. JavaScript é uma linguagem de tipagem dinâmica. Compreender var, let e const é o mínimo obrigatório.
Pergunta: Qual a diferença entre var, let e const?
vartem escopo de função e sofre hoisting com o valorundefined.leteconsttêm escopo de bloco e não são inicializados até a declaração (Zona Morta Temporal).constproíbe a reatribuição, mas não torna o objeto imutável.
Exemplo de hoisting:
console.log(a); // undefined (hoisting)var a = 5;
console.log(b); // ReferenceError: Cannot access 'b' before initializationlet b = 10;Pergunta: O que é hoisting?
É um mecanismo no qual as declarações de variáveis e funções são movidas para o início do seu escopo antes da execução do código. Funções declaradas com function sofrem hoisting por completo, enquanto variáveis sofrem hoisting apenas na declaração, mas não na inicialização.
2. Closures e contexto (this)
Closures são um dos pontos fortes do JavaScript. Elas permitem que uma função lembre do ambiente léxico no qual foi criada.
Pergunta: O que é uma closure? Dê um exemplo.
Uma closure é a combinação de uma função com seu ambiente léxico. Em outras palavras, uma função interna tem acesso às variáveis da função externa mesmo após a função externa ter terminado sua execução.
function createCounter() { let count = 0; return function() { count++; return count; };}
const counter = createCounter();console.log(counter()); // 1console.log(counter()); // 2Pergunta: Como funciona o this em JavaScript?
O valor de this é determinado por como a função é chamada, e não onde ela é declarada. As regras principais são:
- No contexto global (no navegador) —
window, no Node.js —global. - Em um método de objeto — o próprio objeto.
- Em uma função chamada com
new— uma nova instância. - Ao usar
call,apply,bind— o objeto passado. - Em arrow functions —
thisé herdado do contexto léxico externo.
const obj = { name: 'Alice', greet() { console.log(this.name); }};
const greet = obj.greet;greet(); // undefined (perda de contexto)
const boundGreet = obj.greet.bind(obj);boundGreet(); // Alice3. Assincronia: Event Loop, promises e async/await
JavaScript é uma linguagem single-thread, mas lida eficientemente com operações assíncronas graças ao Event Loop. Este é um dos tópicos mais populares em entrevistas.
Pergunta: O que é o Event Loop e como ele funciona?
O Event Loop é um ciclo infinito que monitora a pilha de chamadas (Call Stack) e as filas de tarefas (Task Queue / Microtask Queue). Se a pilha estiver vazia, ele pega a primeira tarefa da fila de microtasks (Promise, MutationObserver) ou macrotasks (setTimeout, I/O).
Pergunta: Qual a diferença entre microtasks e macrotasks?
- Microtasks: Promise.then/catch/finally,