"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Perguntas e respostas da entrevista sobre içamento

Perguntas e respostas da entrevista sobre içamento

Publicado em 2024-11-02
Navegar:426

Interview Questions and Answers in Hoisting

1. O que é içamento em JavaScript?

Resposta: Elevação é o processo durante a fase de criação do contexto de execução onde a memória é alocada para variáveis ​​​​e funções. Durante esse processo, a memória para variáveis ​​é alocada e às variáveis ​​é atribuído o valor indefinido. Para funções, toda a definição da função é armazenada em um endereço específico na memória e uma referência a ela é colocada na pilha naquele contexto de execução específico.

2. Qual é a diferença entre elevação variável e elevação funcional?

Resposta: A elevação de variáveis ​​ocorre quando a declaração de uma variável é movida para o topo de seu escopo. Por outro lado, o içamento de função acontece quando toda a função, incluindo seu corpo, é movida para o topo de seu escopo.

3. Como funciona o içamento em JavaScript?

Resposta: Hoisting é um mecanismo JavaScript onde declarações de variáveis ​​e funções são movidas para o topo de seu escopo antes do início da execução do código. Por causa do içamento, podemos usar variáveis ​​antes de serem declaradas.

  • Elevação de variáveis: Quando uma variável é declarada, ela é movida para o topo de seu escopo e podemos usar essa variável antes mesmo de sua declaração no código.

  • Elevação de função: Quando uma função é içada, todo o corpo da função é movido para o topo de seu escopo. Isso significa que podemos chamar a função antes mesmo de sua declaração no código.

4. Qual é o valor de uma variável declarada, mas não inicializada?

Resposta: Se você declarar uma variável, mas não atribuir um valor a ela, a variável será considerada sem valor. JavaScript move a declaração da variável para o topo durante o içamento, mas a variável ainda não recebeu um valor. A variável é atribuída como indefinida, o que significa que a variável ainda não recebeu nenhum valor.

5. O que acontece se você declarar uma variável duas vezes no mesmo escopo?

Resposta: Se você declarar a mesma variável duas vezes no mesmo escopo, a segunda declaração substituirá a primeira e o valor da primeira declaração será substituído pelo segundo. Isso acontece porque o JavaScript armazena a primeira declaração na memória e, quando encontra a segunda, sobrescreve o valor anterior.

6. Você pode içar uma variável sem usar a palavra-chave var?

Resposta: Sim, em JavaScript, você pode elevar variáveis ​​usando let ou const em vez de var. Embora var tenha sido tradicionalmente usado, ele apresenta alguns problemas relacionados ao escopo, por isso é recomendado usar let ou const.

Exemplo com let:

let myVariable = 42;
console.log(myVariable); // Output: 42

Exemplo com const:

const pi = 3.14159;
console.log(pi); // Output: 3.14159

Variáveis ​​declaradas com let e const têm escopo em nível de bloco, o que significa que estão confinadas ao bloco (como uma função, loop ou instrução) onde são definidas. let permite reatribuição, enquanto const é usado para constantes e não pode ser reatribuído.

7. Qual é a diferença entre uma declaração de função e uma expressão de função em termos de elevação?

Resposta: Uma declaração de função é elevada ao topo de seu escopo, enquanto uma expressão de função não. Isso significa que você pode chamar uma função declarada com uma declaração de função antes de sua definição, mas não pode fazer o mesmo com uma expressão de função.

8. Qual é o escopo de uma variável elevada?

Resposta: O escopo de uma variável elevada depende de onde ela é declarada. Se a variável for declarada dentro de uma função, seu escopo será limitado a essa função, o que significa que não poderá ser acessada fora dela. Se uma variável for declarada fora de qualquer função, ela terá um escopo global, o que significa que pode ser acessada de qualquer lugar no código.

9. Como você pode evitar o içamento em JavaScript?

Resposta: O içamento não pode ser totalmente evitado em JavaScript, mas você pode escrever seu código de uma forma que evite possíveis problemas causados ​​por ele. Uma maneira de fazer isso é declarar todas as variáveis ​​e funções no topo de seu escopo.

Nos exemplos de código acima, todas as variáveis ​​e funções são declaradas no topo de seu bloco usando var ou let. Isso garante que variáveis ​​e funções sejam içadas dentro de seu bloco e apareçam no topo de seu escopo.

Este método torna o fluxo do código e os valores das variáveis ​​mais previsíveis, o que ajuda a reduzir a variabilidade e possíveis bugs.

10. Quais são as possíveis armadilhas do içamento em JavaScript?

Resposta: O içamento pode levar a possíveis problemas se você não entender completamente como funciona, resultando em comportamentos inesperados. Por exemplo, se você declarar uma variável dentro de uma instrução de bloco e tentar acessá-la fora do bloco, a variável poderá ser elevada ao topo da função ou do escopo global, o que pode não ser o que você pretendia.

  • Escopo e içamento do bloco: Variáveis ​​declaradas dentro de um bloco ainda podem ser içadas para o topo de seu escopo.

  • Dificuldade de depuração: O içamento pode dificultar a depuração porque o valor ou a variável que você está tentando acessar pode não se comportar conforme o esperado.

  • Peculiaridades de definição de função: As funções são elevadas ao topo de seu escopo, mas você nem sempre pode usá-las da maneira esperada.
    Para lidar com esses problemas de içamento, é importante declarar suas variáveis ​​e funções de forma clara e entender como o içamento funciona em seu código.

11. O içamento pode alterar a ordem de execução em JavaScript?

Resposta: Sim, o içamento em JavaScript move as declarações de variáveis ​​e funções para o topo de seus respectivos escopos antes do início da execução do código. Isso pode alterar o fluxo esperado de execução do código.
Com o hoisting, você pode declarar uma variável e usá-la antes que ela seja realmente definida, o que pode alterar a ordem esperada de execução do código e levar a resultados indesejados.
Por exemplo, se você não definir funções no início do script e usá-las posteriormente, elas serão elevadas ao topo, potencialmente criando fluxo e comportamento inesperados no código.

12. Qual é a diferença entre içar nas declarações var e let?

Resposta: as declarações var são içadas para o topo do seu escopo, enquanto as declarações let são içadas para o topo do seu bloco. Isso significa que variáveis ​​declaradas com let não podem ser acessadas fora de seu bloco.

Vejamos um exemplo para esclarecer isso:

function example() {
    console.log(x); // undefined
    var x = 5;
    console.log(x); // 5
}
example();
console.log(x); // ReferenceError: x is not defined

Aqui, var x = 5; é içado para o topo do escopo da função. No entanto, quando console.log(x) é chamado antes da declaração, o valor é indefinido devido ao içamento.

Agora vamos ver um exemplo com let:

function example() {
    console.log(y); // ReferenceError: y is not defined
    let y = 10;
    console.log(y); // 10
}
example();
console.log(y); // ReferenceError: y is not defined

Aqui, seja y = 10; é elevado ao topo do escopo do bloco, mas tentar acessá-lo antes de sua declaração resulta em ReferenceError.

Em resumo, variáveis ​​var são içadas para o topo do escopo da função, enquanto variáveis ​​let são içadas para o topo de seu bloco.

13. O que acontece se você tentar acessar uma variável içada antes de ela ser declarada?

Resposta: Se você tentar acessar uma variável içada antes de ela ser declarada, seu valor será indefinido.

14. Qual é o comportamento de elevação das funções de seta em JavaScript?

Resposta: As funções de seta não são içadas em JavaScript, portanto, você não pode chamar uma função de seta antes de ela ser definida.

// This will work
function regularFunction() {
    console.log("This is a regular function");
}
regularFunction(); // "This is a regular function"
// This will not work
arrowFunction(); // TypeError: arrowFunction is not a function
const arrowFunction = () => {
    console.log("This is an arrow function");
};

Aqui, regularFunction é içado e pode ser chamado antes de sua definição, mas arrowFunction não é içado, portanto, chamá-lo antes de sua definição resultará em um erro.

15. O içamento pode ocorrer dentro de uma função?

Resposta: Sim, o içamento pode ocorrer dentro de uma função. Isso significa que variáveis ​​ou funções declaradas dentro de uma função são elevadas ao topo do escopo dessa função.

16. Qual é a cadeia de escopo em JavaScript?

Resposta: Em JavaScript, a cadeia de escopo é a hierarquia de escopos usada pelo mecanismo JavaScript para procurar o valor de uma variável. A cadeia de escopo inclui o escopo da função atual, os escopos da função externa e o escopo global.

A cadeia de escopo funciona como um processo passo a passo para encontrar o valor de uma variável. Se uma variável ou função for declarada dentro de uma função, o mecanismo JavaScript primeiro procura dentro do escopo dessa função. Se o valor não for encontrado lá, ele pesquisa a função externa e continua esse processo até atingir o escopo global.
Dessa forma, o JavaScript usa a cadeia de escopo para encontrar valores de variáveis ​​e atualiza a cadeia de acordo com onde a variável está definida.

17. Qual será o resultado do seguinte trecho de código?

Responder:

console.log(a);
var a = 10;
Output: undefined

18. Qual será o resultado do seguinte trecho de código?

Responder:
ReferenceError: a não está definido
Neste caso, a é declarado usando let, o que significa que não é elevado ao topo do seu escopo. Como a não é definido antes da instrução console.log(), um erro de referência é gerado.

19. Qual será o resultado do seguinte trecho de código?

Responder:

var a = 5;
(function() {
    console.log(a); // undefined
    var a = 10;
})();
Output: undefined

Para entender esse processo completamente, vamos analisá-lo passo a passo:

Na primeira linha, var a = 5; cria uma variável a com o valor 5 no escopo global.
Em seguida, uma expressão de função invocada imediatamente (IIFE) é definida e chamada.
Dentro da função, console.log(a); tenta imprimir o valor de a. No entanto, porque var a = 10; é declarada dentro da função, a variável local a é içada para fora do escopo da função, mas seu valor ainda não foi atribuído, então ela imprime indefinido.
Depois disso, var a = 10; cria uma nova variável a no escopo local com o valor 10.
Assim, o primeiro console.log(a); imprime indefinido devido ao içamento e após a declaração o valor de a é atualizado para 10.

20. Qual será o resultado do seguinte trecho de código?

Responder:

function test() {
  console.log(a);
  var a = 10;
  console.log(a);
}
test();
Output:
undefined
10

A função test() é definida com duas instruções console.log():

No primeiro console.log(a); a variável a é declarada dentro da função, mas ainda não recebeu um valor, então ela imprime indefinido.
No segundo console.log(a); à variável a é atribuído o valor 10, que é impresso como 10.
Assim, quando a função é chamada, o primeiro console.log(a); imprime indefinido e o segundo console.log(a); imprime 10.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/nozibul_islam_113b1d5334f/interview-questions-and-answers-in-hoisting-l0a?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3