×

Se você está se preparando para uma entrevista de desenvolvedor sênior em JavaScript ou apenas quer testar seus conhecimentos, este artigo é para você. Vamos explorar algumas das perguntas mais avançadas, cobrindo desde conceitos orientados a objetos até o loop de eventos, com exemplos de código para ajudar na compreensão.

1. O que o seguinte código imprime? Por quê?

“`javascript
const obj = {
name: ‘obj’,
getName: function() {
return function() {
return this.name;
}
}
}

const fn = obj.getName();
fn();
“`

Resposta: undefined

Análise: A função interna de getName é executada no escopo global, então this aponta para window/global, e window/global não possui uma propriedade name, portanto, é retornado undefined.

Para que o this da função interna também aponte para obj, pode-se usar uma função seta ou bind para vincular this:

“`javascript
const obj = {
name: ‘obj’,
getName: function() {
return () => {
return this.name;
}
}
}
“`

2. Implemente uma fábrica de contadores:

“`javascript
function createCounter() {
let count = 0;
return function() {
return count++;
}
}

const counter1 = createCounter();
const counter2 = createCounter();
console.log(counter1()); // 0
console.log(counter1()); // 1
console.log(counter2()); // 0
“`

Análise: A razão pela qual os contadores podem ser incrementados independentemente é devido à característica de fechamento usada. A função createCounter cria um fechamento que pode acessar a variável count no escopo externo. counter1 e counter2 referem-se a diferentes instâncias de função de fechamento, alcançando assim a independência de contagem.

3. Mecanismo de Loop de Eventos

O loop de eventos é um mecanismo crucial no JavaScript, especialmente no ambiente de execução do navegador ou do Node.js, que permite a execução assíncrona de operações. Entender o loop de eventos é vital para a otimização de aplicações web, garantindo que elas permaneçam responsivas e eficientes.

Em sua essência, o loop de eventos funciona como uma fila de mensagens. Sempre que uma função assíncrona é chamada (como setTimeout, promises ou eventos do DOM), ela é adicionada à fila de mensagens. O loop de eventos processa essas mensagens uma de cada vez, garantindo que uma única operação seja executada no thread principal, prevenindo condições de corrida e outros problemas de concorrência.

Exemplo Prático

“`javascript
console.log(‘Início’);

setTimeout(() => {
console.log(‘Timeout 1’);
}, 1000);

setTimeout(() => {
console.log(‘Timeout 2’);
}, 0);

console.log(‘Fim’);
“`

Neste exemplo, a saída no console será:

Início
Fim
Timeout 2
Timeout 1

Isso acontece porque, embora Timeout 2 tenha um delay de 0 ms, ele ainda é colocado na fila de mensagens e só será executado após o código síncrono (início e fim) ser concluído.

Para aprofundar ainda mais seu conhecimento sobre o loop de eventos, recomendo a leitura deste artigo detalhado na MDN.

Se você tem interesse em explorar mais sobre JavaScript assíncrono, consulte também a documentação completa sobre Promises e async/await no MDN.

Compartilhe suas dúvidas ou experiências com estas questões nos comentários abaixo. Vamos aprender juntos!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Autor

flpchapola@hotmail.com

Posts relacionados

Desmistificando o desenvolvimento: o que realmente importa além de escrever código

Desmistificando o desenvolvimento: o que realmente importa além de escrever código

Ser um desenvolvedor não se resume apenas a escrever código. Na verdade, escrever código é uma das atividades menos importantes em uma...

Leia tudo
Substituindo ESLint e Prettier: Biome simplifica linting e formatação em um só lugar!

Substituindo ESLint e Prettier: Biome simplifica linting e formatação em um só lugar!

Nos meus novos projetos, tenho substituído o ESLint e Prettier pelo Biome. Um dos grandes destaques do Biome é que ele já...

Leia tudo
"Recupere sua vida: um emprego é só uma parte dela; tenha um plano B e valorize seu tempo pessoal"

“Recupere sua vida: um emprego é só uma parte dela; tenha um plano B e valorize seu tempo pessoal”

Em um mundo empresarial cada vez mais dinâmico e volátil, é importante entender a natureza temporária dos empregos. Desapegar-se da noção de...

Leia tudo
Vale a Pena Virar Programador Agora?

Vale a Pena Virar Programador Agora?

O Mercado de Tecnologia em Transformação O mercado de tecnologia está em constante evolução, e a análise de tendências é fundamental para...

Leia tudo
Todo desenvolvedor deve aprender a se vender: você é sua própria marca e o código é seu produto.

Todo desenvolvedor deve aprender a se vender: você é sua própria marca e o código é seu produto.

Todo desenvolvedor deve estudar vendas. Não necessariamente para fins comerciais, mas para aprender a vender a si mesmo. Pense nisso: você é...

Leia tudo
"7 Frases Pequenas, mas Poderosas, que Confortam e Acolhem em Momentos de Dificuldade"

“7 Frases Pequenas, mas Poderosas, que Confortam e Acolhem em Momentos de Dificuldade”

As palavras têm um poder imenso sobre nossas emoções e nossa resiliência. Em tempos de adversidade, uma frase encorajadora pode ser a...

Leia tudo