Perguntas e respostas frequentes sobre entrevistas em JavaScript

Ter JavaScript em seu portfólio aumenta as chances de conseguir uma função de desenvolvedor de software. Dito isso, vamos verificar as perguntas frequentes sobre entrevistas em JavaScript.

JavaScript é uma das linguagens mais utilizadas no desenvolvimento web. É usado para desenvolver quase qualquer tipo de aplicativo agora.

Antes de pular para as perguntas da entrevista, vamos ver as vantagens de aprender JavaScript.

JavaScript é uma linguagem de programação leve, interpretada ou compilada just-in-time. É uma das principais linguagens da rede mundial de computadores. Você conhece os outros dois idiomas básicos de www. É melhor procurá-los se não o fizer.

JavaScript é criado principalmente para a web. Mas não é só para a web agora. Com a ajuda de ambientes como Node, Deno, etc., podemos executá-lo em praticamente qualquer plataforma.

Vamos conferir algumas vantagens dele.

Vantagens do JavaScript

  • Fácil de começar. Você pode aprender mesmo sem nenhum conhecimento de codificação.
  • Grande comunidade ao seu redor. Você receberá toda a ajuda que deseja se estiver preso em algum lugar.
  • Existem muitas bibliotecas/frameworks construídos usando JavaScript, o que ajuda a desenvolver aplicativos mais rapidamente.
  • Podemos desenvolver aplicações frontend, backend, android, ios, etc., com JavaScript. Podemos criar quase qualquer tipo de aplicativo com ele. Mas, é mais robusto no desenvolvimento web.
  • Quais são os tipos de dados em JavaScript?

    Os tipos de dados são usados ​​para armazenar diferentes tipos de dados. Os tipos de dados serão diferentes de uma linguagem de programação para outra. Em JavaScript, temos 8 tipos de dados. Vamos vê-los um por um.

    • Número
    • Corda
    • boleano
    • Indefinido
    • Nulo
    • BigInt
    • Símbolo
    • Objeto

    Todos os tipos de dados, exceto Object, são chamados de valores primitivos. E eles são imutáveis.

    Quais são os métodos internos em JavaScript?

    Os métodos integrados em JavaScript são diferentes para cada tipo de dados. Podemos acessar esses métodos internos usando o respectivo tipo de dados. Vamos ver alguns métodos integrados para diferentes tipos de dados e estruturas de dados.

  • Número
  • Corda
    • para letras minúsculas
    • começa com
    • gráfico em
  • Variedade
  • Existem muitos métodos integrados para cada tipo de dados. Você pode verificar as referências de todos os métodos internos de diferentes tipos de dados e estruturas de dados.

    Como criar um array em JavaScript?

    Arrays são uma das principais estruturas de dados em JavaScript. Arrays podem conter qualquer tipo de dados, pois o JavaScript é dinâmico. Vamos ver como criar arrays em JavaScript.

    Podemos criar uma matriz usando colchetes[]. É direto e rápido criar objetos

    // Empty array
    const arr = [];
    
    // Array with some random values
    const randomArr = [1, "One", true];
    
    console.log(arr, randomArr);

    Podemos criar um array usando o construtor Array. As pessoas raramente usam o construtor para criar arrays em projetos gerais.

    // Empty array
    const arr = new Array();
    
    // Array with some random values
    const randomArr = new Array(1, "One", true);
    
    console.log(arr, randomArr);

    Arrays JavaScript são mutáveis, ou seja, podemos modificá-los como quisermos depois de criá-los.

    Como criar um objeto em JavaScript?

    Além do array, o objeto é outra estrutura de dados central em JavaScript. Os objetos estão usando para armazenar os pares chave-valor. A chave deve ser um valor imutável, enquanto o valor pode ser qualquer coisa. Vamos ver como criar objetos em JavaScript.

    Podemos criar objetos usando colchetes {}. É direto e rápido criar objetos.

    // Empty object
    const object = {};
    
    // Object with some random values
    const randomObject = { 1: 2, one: "Two", true: false };
    
    console.log(object, randomObject);

    Podemos criar objetos usando o construtor Object. As pessoas raramente usam isso em projetos gerais.

    // Empty object
    const object = new Object();
    
    // Object with some random values
    const randomObject = new Object();
    randomObject[1] = 2;
    randomObject["one"] = "Two";
    randomObject[true] = false;
    
    console.log(object, randomObject);

    Os objetos JavaScript são mutáveis, ou seja, podemos modificá-los após a criação, como você pode ver no 2º exemplo.

    Como você depura o código JavaScript?

    O código de depuração não é simples. E é diferente de uma linguagem de programação para outra, de um projeto para outro, etc.; vamos ver as coisas comuns usadas para depurar o JavaScript.

    1. Registro

    Podemos usar as instruções console.log em vários lugares em nosso código para identificar o bug. O código irá parar de executar as próximas linhas de código quando houver um bug na linha anterior.

    Logging é um dos antigos métodos de depuração, que é bastante eficaz para pequenos projetos. É uma técnica de depuração comum para qualquer linguagem de programação.

    2. Ferramentas do desenvolvedor

    O JavaScript é usado principalmente para o desenvolvimento de aplicativos da web. Portanto, quase todos os navegadores agora têm ferramentas de desenvolvedor que ajudam a depurar o código JavaScript.

    Um dos métodos de depuração mais usados ​​é definir pontos de interrupção nas ferramentas do desenvolvedor. Os breakpoints param a execução do JavaScript e fornecem todas as informações sobre a execução no momento.

    Podemos definir vários pontos de interrupção em torno do local onde estamos recebendo erros e ver o que está causando isso. É a maneira mais eficaz de depurar aplicativos da web JavaScript.

      Como usar a API etechpt.com com clientes PHP

    3. IDEs

    Podemos usar os IDEs para depurar JavaScript. O VS Code oferece suporte à depuração com pontos de interrupção. O recurso de depuração pode diferir com base no IDE que você está usando. Mas, a maioria dos IDEs terá esse recurso.

    Como adicionar código JavaScript em um arquivo HTML?

    Podemos adicionar o arquivo HTML JavaScript usando a tag script. Você pode verificar o exemplo abaixo.

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <title>etechpt.com</title>
      </head>
      <body>
        <h1>etechpt.com</h1>
    
        <script>
          // JavaScript code goes here
          console.log("This is JavaScript code");
        </script>
      </body>
    </html>

    O que são cookies?

    Cookies são pares chave-valor usados ​​para armazenar pequenas informações. A informação pode ser qualquer coisa. Podemos definir o tempo de expiração dos cookies, que serão excluídos após o prazo de expiração. Estes são amplamente utilizados para armazenar as informações dos usuários.

    Os cookies não serão apagados mesmo se atualizarmos a página até que os excluamos ou expirem. Você pode verificar os cookies de qualquer aplicativo/página da web em qualquer navegador abrindo as ferramentas do desenvolvedor.

    Podemos ler o cookie em JavaScript usando document.cookie. Ele retornará todos os cookies que criamos.

    console.log("All cookies", document.cookie);

    Ele retornará uma string vazia se não houver cookies.

    Podemos criar os cookies definindo o par chave-valor para o document.cookie. Vejamos um exemplo.

    document.cookie = "one=One;";

    Na sintaxe acima, a chave de um cookie e Um é seu valor. Podemos adicionar mais atributos ao cookie como domínio, caminho, expira, etc.; cada um deles deve ser separado por ponto e vírgula (;). Todos os atributos são opcionais.

    Vejamos um exemplo com atributos.

    document.cookie = "one=One;expires=Jan 31 2023;path=/;";

    No código acima, adicionamos uma data de expiração e um caminho para o cookie. Se a data de expiração não for fornecida, o cookie será excluído após a sessão. O caminho padrão será o caminho do arquivo. O formato da data de expiração deve estar em GMT.

    Vamos ver como criar vários cookies.

    document.cookie = "one=One;expires=Jan 31 2023;path=/;";
    document.cookie = "two=Two;expires=Jan 31 2023;path=/;";
    document.cookie = "three=Three;expires=Jan 31 2023;path=/;";

    Os cookies não serão substituídos se a chave ou o caminho for diferente ao definir vários cookies. Se a chave e o caminho forem os mesmos, ele substituirá o cookie anterior. Confira o exemplo abaixo, que substituirá o cookie definido anteriormente.

    document.cookie = "one=One;expires=Jan 31 2023;path=/;";
    document.cookie = "one=Two;path=/;";

    Removemos a data de expiração do cookie e alteramos o valor.

    Use a data de expiração como uma data futura quando estiver testando o código para que funcione corretamente. Se você mantiver a mesma data de 31 de janeiro de 2023, mesmo após 31 de janeiro de 2023, os cookies não serão criados.

    Vimos como criar e atualizar cookies. Vamos ver como excluir cookies.

    Excluir cookies é fácil. Basta alterar a data de validade do cookie para qualquer data anterior. Verifique o exemplo abaixo.

    // Creating cookies
    document.cookie = "one=One;expires=Jan 31 2023;path=/;";
    document.cookie = "two=Two;expires=Jan 31 2023;path=/;";
    document.cookie = "three=Three;expires=Jan 31 2023;path=/;";
    
    // Deleting the last cookie
    document.cookie = "three=Three;expires=Jan 1 2023;path=/;";

    Você não encontrará o último cookie nos cookies, pois ele é excluído na última linha do código. É isso para o tutorial min cookies.

    Quais são os diferentes frameworks JavaScript?

    Existem muitos frameworks JavaScript por aí. React, Vue, Angular, etc., para desenvolvimento de UI. Express, Koa, Nest, etc., para desenvolvimento do lado do servidor. NextJS, Gatsby, etc., para geração de sites estáticos. React Native, Ionic, etc., para desenvolvimento de aplicativos móveis. Mencionamos alguns dos frameworks JavaScript aqui. Você pode encontrar mais estruturas que levarão muito tempo para explorar. Explore quando precisar deles.

    Fechamentos em JavaScript

    Um encerramento é uma função agrupada com seu escopo lexical e seu ambiente lexical pai. Com fechamentos, podemos acessar os dados do escopo externo. Os fechamentos são formados quando as funções são criadas.

    function outer() {
      const a = 1;
      function inner() {
        // We can access all the data from the outer function scope here
        // The data will be available even if we execute this function outside the outer function 
        // as inners' closure formed while creating it
        console.log("Accessing a inside inner", a);
      }
      return inner;
    }
    
    const innerFn = outer();
    innerFn();

    Closures são amplamente usados ​​em aplicações JavaScript. Você pode tê-los usado antes sem perceber que eles são encerramentos. Há muito mais do que isso para aprender sobre os fechamentos. Certifique-se de ter aprendido este conceito completamente.

    Levantamento em JavaScript

    Hoisting é um processo em JavaScript em que a declaração de variáveis, funções e classes se move para o topo do escopo antes de executar o código.

    // Accessing `name` before declaring
    console.log(name);
    
    // Declaring and initializing the `name`
    var name = "etechpt.com";

    Se você executar o código acima, não verá nenhum erro. Mas na maioria dos idiomas, você receberá o erro. A saída será indefinida, pois hoisting apenas move as declarações para o topo e não a inicializará até a linha número 3.

    Altere o var para let ou const da seguinte maneira e execute o código novamente.

    // Accessing `name` before declaring
    console.log(name);
    
    // Declaring and initializing the `name`
    const name = "etechpt.com";

    Agora, você receberá o erro de referência dizendo que não podemos acessar a variável antes de inicializá-la.

    ReferenceError: Cannot access 'name' before initialization

    Portanto, aqui o let e o const são introduzidos no ES6, que não podem ser acessados ​​antes da inicialização, como sugere o erro. Isso ocorre porque as variáveis ​​declaradas com let ou const ficarão na Zona Morta Temporal (TDZ) até a linha ser inicializada. Não podemos acessar as variáveis ​​de TDZ.

    Curry em JavaScript

    Currying é uma técnica para converter funções com muitos parâmetros em menos parâmetros com vários callables. Com ele, podemos converter uma função callable add(a, b, c, d) em add(a)(b)(c)(d) callable. Vamos ver um exemplo de como fazer.

    function getCurryCallback(callback) {
      return function (a) {
        return function (b) {
          return function (c) {
            return function (d) {
              return callback(a, b, c, d);
            };
          };
        };
      };
    }
    
    function add(a, b, c, d) {
      return a + b + c + d;
    }
    
    const curriedAdd = getCurryCallback(add);
    
    // Calling the curriedAdd
    console.log(curriedAdd(1)(2)(3)(4));

    Podemos generalizar a função getCurryCallback que será usada para diferentes funções para converter em currying callables. Você pode consultar as informações do JavaScript para obter mais detalhes.

    Diferença entre documento e janela

    A janela é o objeto mais alto no navegador. Contém todas as informações sobre a janela do navegador, como histórico, localização, navegador, etc.; está globalmente disponível em JavaScript. Podemos usá-lo diretamente em nosso código sem nenhuma importação. Podemos acessar as propriedades e métodos do objeto window sem window.

    O documento é a parte do objeto janela. Todo o HTML carregado na página da Web é convertido no objeto do documento. O objeto document refere-se ao elemento HTMLDocument especial, que terá diferentes propriedades e métodos como todos os elementos HTML.

      Como criar um livro no Microsoft Word

    A janela do objeto representa a janela do navegador e o documento representa o documento HTML carregado nessa janela do navegador.

    Diferença entre o lado do cliente e o lado do servidor

    O lado do cliente refere-se ao usuário final que usa o aplicativo. O lado do servidor refere-se ao servidor da Web em que o aplicativo é implantado.

    Na terminologia front-end, podemos dizer navegador nos computadores dos usuários como lado do cliente e serviços em nuvem como lado do servidor.

    Diferença entre innerHTML e innerText

    Tanto o innerHTML quanto o innerText são as propriedades dos elementos HTML. Podemos alterar o conteúdo de um elemento HTML usando essas propriedades.

    Podemos atribuir a string HTML para innerHTML uma propriedade renderizada como HTML normal. Verifique o exemplo abaixo.

    const titleEl = document.getElementById("title");
    
    titleEl.innerHTML = '<span style="color:orange;">etechpt.com</span>';

    Adicione um elemento com o título id ao seu HTML e adicione o script acima ao arquivo JavaScript. Execute o código e veja a saída. Você vai etechpt.com na cor laranja. E se você inspecionar o elemento, ele estará dentro da tag span. Portanto, o innerHTML pegará a string HTML e a renderizará como HTML normal.

    O innerText do outro lado pegará uma string normal e a renderizará como está. Ele não renderizará nenhum HTML como o innerHTML. Altere o innerHTML para innerText no código acima e verifique a saída.

    const titleEl = document.getElementById("title");
    
    titleEl.innerText="<span style="color:orange;">etechpt.com</span>";

    Agora, você verá a string exata que fornecemos na página da web.

    Diferença entre let e var

    As palavras-chave let e var são usadas para criar variáveis ​​em JavaScript. A palavra-chave let é introduzida no ES6.

    O let tem escopo de bloco e var tem escopo de função.

    {
      let a = 2;
      console.log("Inside block", a);
    }
    console.log("Outside block", a);

    Execute o código acima. Você receberá um erro na última linha, pois não podemos acessar deixe um fora do bloco porque ele tem escopo de bloco. Agora, mude para var e execute-o novamente.

    {
      var a = 2;
      console.log("Inside block", a);
    }
    console.log("Outside block", a);

    Você não receberá nenhum erro, pois também podemos acessar uma variável fora do bloco. Agora, vamos substituir o bloco por uma função.

    function sample() {
      var a = 2;
      console.log("Inside function", a);
    }
    sample();
    console.log("Outside function", a);

    Você receberá um erro de referência se executar o código acima, pois não podemos acessá-lo fora da função porque ele tem escopo de função.

    Podemos redeclarar as variáveis ​​usando a palavra-chave var, mas não podemos redeclará-las usando a palavra-chave let. Vejamos um exemplo.

    var a = "etechpt.com";
    var a = "Chandan";
    console.log(a);
    let a = "etechpt.com";
    let a = "Chandan";
    console.log(a);

    A primeira parte do código não gerará nenhum erro e o valor será alterado para o último valor atribuído. O segundo trecho de código gerará um erro, pois não podemos redeclarar variáveis ​​usando let.

    Diferença entre armazenamento de sessão e armazenamento local

    O armazenamento de sessão e o armazenamento local são usados ​​para armazenar informações nos computadores dos usuários, que podem ser acessadas sem a Internet. Podemos armazenar os pares chave-valor no armazenamento de sessão e no armazenamento local. A chave e o valor serão convertidos em strings se você fornecer qualquer outro tipo de dados ou estrutura de dados.

    O armazenamento da sessão será limpo após o término da sessão (quando o navegador for fechado). O armazenamento do local não será limpo até que o limpemos.

    Podemos acessar, atualizar e excluir armazenamento de sessão e armazenamento de localização com objetos sessionStorage e localStorage, respectivamente.

    O que é NaN em JavaScript?

    O NaN é abreviado como Not-a-Number. Representa que algo não é um número legal/válido em JavaScript. Existem alguns casos em que obteremos NaN como saída como 0/0, indefinido * 2, 1 + indefinido, nulo * indefinido etc.,

    O que é escopo léxico?

    O escopo léxico refere-se ao acesso às variáveis ​​do escopo de seus pais. Digamos que temos uma função com duas funções internas. A função mais interna pode acessar as variáveis ​​de escopo de suas duas funções pai. Da mesma forma, a função de segundo nível pode acessar o escopo da função mais externa. Vejamos em um exemplo.

    function outermost() {
      let a = 1;
      console.log(a);
      function middle() {
        let b = 2;
        // `a` are accessible here
        console.log(a, b);
        function innermost() {
          let c = 3;
          // both `a` and `b` are accessible here
          console.log(a, b, c);
        }
        innermost();
      }
      middle();
    }
    outermost();

    O JavaScript usa uma cadeia de escopo para encontrar a variável quando a acessamos em algum lugar do código. Primeiro, ele verificará a variável no escopo atual e, em seguida, o escopo pai até o escopo global.

    O que é passado por valor e passado por referência?

    A passagem por valor e a passagem por referência são duas maneiras de passar os argumentos para uma função em JavaScript.

    Pass by value: cria uma cópia dos dados originais e passa para a função. Portanto, quando fizermos alterações na função, isso não afetará os dados originais. Verifique o exemplo abaixo.

    function sample(a) {
      // changing the value of `a`
      a = 5;
      console.log("Inside function", a);
    }
    let a = 3;
    sample(a);
    console.log("Outside function", a);

    Você verá que o valor original de a não é alterado, embora o tenhamos alterado dentro da função.

    Passar por referência: passa a referência dos dados para a função. Assim, quando fizermos qualquer alteração na função, ela também alterará os dados originais.

    function sample(arr) {
      // adding a new value to the array
      arr.push(3);
      console.log("Inside function", arr);
    }
    let arr = [1, 2];
    sample(arr);
    console.log("Outside function", arr);

    Você verá que o valor original do arr é alterado quando o alteramos dentro da função.

    Observação: todos os tipos de dados primitivos são passados ​​por valor e os não primitivos são passados ​​por referência.

    O que é memoização?

    A memoização é uma técnica que armazena os valores calculados em caches e os utiliza quando precisamos deles novamente sem computá-los novamente. Isso acelerará a execução do código se a computação for muito pesada. Há uma compensação de armazenamento que não é um grande problema em comparação com o tempo.

    const memo = {};
    function add(a, b) {
      const key = `${a}-${b}`;
    
      // checking whether we computed the value already or not
      if (memo[key]) {
        console.log("Not computing again");
        return memo[key];
      }
    
      // adding the newly computed value to cache
      // here cache is a simple global object
      memo[key] = a + b;
      return memo[key];
    }
    
    console.log(add(1, 2));
    console.log(add(2, 3));
    console.log(add(1, 2));

    É um exemplo simples que demonstra memoização. Aqui, adicionar dois números não é um cálculo pesado e difícil. É apenas para a demonstração.

    Qual é o parâmetro restante?

    O parâmetro rest é usado para coletar todos os parâmetros restantes em uma função. Digamos que temos uma função que aceitará no mínimo 2 argumentos e pode aceitar qualquer número de parâmetros no máximo. Como não temos o número máximo de argumentos, podemos coletar os 2 primeiros parâmetros com variáveis ​​normais e todos os outros com o parâmetro rest usando o operador rest.

    function sample(a, b, ...rest) {
      console.log("Rest parameter", rest);
    }
    
    sample(1, 2, 3, 4, 5);

    O parâmetro rest será uma matriz dos últimos três argumentos no exemplo acima. Com isso, podemos ter qualquer número de parâmetros para uma função.

      Como corrigir o iPhone Share My Location está acinzentado

    Uma função pode ter apenas um parâmetro de descanso. E o parâmetro resto deve ser o último na ordem dos parâmetros.

    O que é desestruturação de objetos?

    A desestruturação do objeto é usada para acessar as variáveis ​​do objeto e atribuí-las a variáveis ​​com os mesmos nomes das chaves do objeto. Vejamos um exemplo.

    const object = { a: 1, b: 2, c: 3 };
    
    // Object destructuring
    const { a, b, c } = object;
    
    // Now, a, b, c will be used as normal variables
    console.log(a, b, c);

    Podemos alterar as variáveis ​​de variáveis ​​desestruturadas na mesma linha da seguinte maneira.

    const object = { a: 1, b: 2, c: 3 };
    
    // Changing the names of `a` and `b`
    const { a: changedA, b: changedB, c } = object;
    
    // Now, changedA, changedB, c will be used as normal variables
    console.log(changedA, changedB, c);

    O que é desestruturação de array?

    A desestruturação do array é usada para acessar as variáveis ​​do array e atribuí-las a variáveis. Vejamos um exemplo.

    const array = [1, 2, 3];
    
    // Array destructuring
    // It's based on the index of the array
    const [a, b, c] = array;
    
    // Now, we can use a, b, c as normal variables
    console.log(a, b, c);

    O que são captura de eventos e borbulhamento de eventos?

    Captura de eventos e bubbling de eventos são duas formas de propagação de eventos em HTML DOM. Digamos que existam dois elementos HTML, um dentro do outro. E um evento ocorre no elemento interno. Agora, o modo de propagação dos eventos decidirá a ordem de execução desses eventos.

    Bubbling de eventos: ele executa o manipulador de eventos no elemento primeiro, depois em seu elemento e, em seguida, vai até o elemento mais alto. Este é o comportamento padrão de todos os eventos.

    Captura de eventos: precisamos especificar no evento que precisamos usar esse tipo de propagação de eventos. Podemos especificá-lo ao adicionar o ouvinte de evento. Os eventos serão executados na seguinte ordem se tivermos a captura de eventos habilitada.

  • Os eventos começam a ser executados do elemento mais alto até o elemento de destino para baixo.
  • O evento no elemento de destino será executado novamente.
  • A propagação do evento de borbulhamento ocorrerá novamente até que o elemento superior esteja ativo.
  • Podemos interromper a propagação do evento chamando event.stopPropogation como um método no manipulador de eventos.

    Quais são as promessas em JavaScript?

    O objeto Promise é usado para as operações assíncronas que serão concluídas no futuro com um estado de sucesso ou falha.

    Uma promessa pode estar em um dos seguintes estados.

  • pendente – quando a operação ainda está em andamento.
  • cumprido – quando a operação é concluída com sucesso. Teremos resultados (se houver) no estado de sucesso.
  • rejeitado – quando a operação é concluída com falha. Teremos o motivo (erro) pelo qual falhou.
  • Vejamos dois exemplos de casos de sucesso e fracasso.

    // Promise which will complete successfully
    const successPromise = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({ message: "Completed successfully" });
      }, 300);
    });
    successPromise
      .then((data) => {
        console.log(data);
      })
      .catch((error) => {
        console.log(error);
      });
    
    // Promise which will complete with failure state
    const failurePromise = new Promise((resolve, reject) => {
      setTimeout(() => {
        reject(new Error("Failing the promise for testing"));
      }, 300);
    });
    failurePromise
      .then((data) => {
        console.log(data);
      })
      .catch((error) => {
        console.log(error);
      });

    Você pode ter mais de um encadeamento, se necessário. Os dados retornados anteriormente serão aceitos no próximo callback.

    Explicar os diferentes tipos de escopo em JavaScript

    Existem dois tipos de escopo em JavaScript. O escopo global e o escopo local.

    Você também deve ter ouvido falar sobre escopo de função e escopo de bloco. Eles são escopos locais para var e let, const respectivamente.

    O que são funções de auto-invocação?

    As funções de auto-invocação são funções sem nome que serão executadas imediatamente após a criação. Vejamos alguns exemplos.

    // Without any parameters
    (function sayHello() {
      console.log("Hello, World!");
    })();
    
    // With parameters
    (function add(a, b) {
      console.log("Sum", a + b);
    })(1, 2);

    Podemos até mesmo passar os argumentos para as funções de auto-invocação como você viu no exemplo.

    O que são funções de seta?

    A função de seta é um açúcar sintático para a função normal com algumas alterações. Eles se comportam como funções normais em casos de uso geral. As funções de seta são úteis quando precisamos de retornos de chamada. Vejamos sua sintaxe.

    // arrow functions will return by default if it doesn't have any brackets
    let add = (a, b) => a + b;
    
    console.log(add(1, 2));

    Existem algumas diferenças entre as funções de seta e as funções normais.

    • As funções de seta não têm sua própria associação this. A palavra-chave this dentro da função de seta refere-se ao seu escopo pai this.
    • As funções de seta não podem ser usadas como funções de construtor

    O que são callbacks?

    Um retorno de chamada é uma função que é passada para outra função que é invocada dentro dessa função. Usar callbacks é algo comum em JavaScript. Vejamos um exemplo.

    function sample(a, b, callback) {
      const result = a + b;
      callback(result);
    }
    
    function finished(result) {
      console.log("Finished with", result);
    }
    
    sample(1, 2, finished);

    A função concluída é passada como um retorno de chamada para a amostra. A função finalizada é invocada com o resultado após a execução de alguma ação. Você verá o uso de callbacks principalmente em operações assíncronas como promessas, setTimeout, etc.,

    Quais são os diferentes tipos de erros?

    Vamos verificar alguns erros no JavaScript.

    ReferenceError: este erro ocorrerá se a variável que estamos acessando estiver disponível.

    TypeError: JavaScript lançará este erro se o erro não corresponder a outros tipos de erros. Também ocorrerá quando tentarmos realizar uma ação incompatível com os dados.

    SyntaxError: este erro ocorrerá se a sintaxe do JavaScript não estiver correta.

    Existem alguns outros tipos de erros também. Mas, esses são os tipos de erro comuns em JavaScript.

    Quais são os diferentes escopos de variáveis ​​em JavaScript?

    Existem dois escopos de variáveis ​​em JavaScript. As variáveis ​​declaradas usando a palavra-chave var terão escopo de função e as variáveis ​​declaradas com let e const terão escopo de bloco.

    Consulte a 17ª pergunta para obter mais detalhes sobre o escopo dessas variáveis.

    O que são caracteres de escape em JavaScript?

    A barra invertida é o caractere de escape em JavaScript. É usado para imprimir alguns caracteres especiais que geralmente não podemos imprimir. Digamos que queremos imprimir o apóstrofo (‘) dentro de uma string, o que não podemos fazer normalmente, pois a string terminará no segundo apóstrofo. Nesse caso, usaremos o caractere de escape para evitar que a string termine nesse ponto.

    const message="Hi, I"m etechpt.com';
    console.log(message);

    Podemos obter a saída acima sem usar o caractere de escape, substituindo os apóstrofos simples externos por apóstrofos duplos. Mas é apenas um exemplo de como usar um caractere de escape. Existem outros caracteres para os quais definitivamente precisamos de caracteres de escape como n, t, etc.,

    O que são BOM e DOM?

    Browser Object Model (BOM): todos os navegadores têm BOM representando a janela atual do navegador. Ele contém nosso objeto de janela superior que é usado para manipular a janela do navegador.

    Document Object Model (DOM): os navegadores criam o DOM quando o HTML é carregado na estrutura da árvore. Podemos manipular os elementos HTML usando a API DOM.

    O que é um objeto de tela?

    O objeto de tela é uma das propriedades do objeto de janela global. Ele contém diferentes propriedades da tela na qual a janela atual do navegador é renderizada. Algumas das propriedades são largura, altura, orientação, pixelDepth, etc.,

    Conclusão

    Pode haver perguntas de acompanhamento para todas as perguntas acima. Portanto, você precisa preparar os conceitos em torno de todas as questões acima.

    Você também pode explorar algumas perguntas e respostas frequentes sobre entrevistas em Java.

    Bons estudos 🙂