"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 > Desvendando o JavaScript: um mergulho profundo em içamento, zona morta temporal e estados variáveis

Desvendando o JavaScript: um mergulho profundo em içamento, zona morta temporal e estados variáveis

Publicado em 30/07/2024
Navegar:229

Unraveling JavaScript: A Deep Dive into Hoisting, Temporal Dead Zone, and Variable States

Abaixo tenho duas linhas de código simples e agradáveis. Mas posso garantir que isso irá confundir muito (como porque você ignorou o princípio do sublinhado do JS) ou confortá-lo.

Mas possui conceitos de conhecimento totalmente carregados conforme abaixo

  • Elevação
  • Zona morta temporal
  • variável (não declarada, não inicializada, indefinida) (bônus)

Minha declaração contraditória
como var, const e let também içar suas propriedades, mas elas estão em zonas diferentes.

hoisting Def (versão simples/leiga)

  1. podemos acessar funções e variáveis ​​antes de sua declaração real.

Agora é hora de nos aprofundarmos em como Js compila e executa nosso código de 2 linhas

Em JavaScript, a maneira como o compilador e o mecanismo lidam com declarações e atribuições de variáveis ​​​​pode ter nuances, especialmente ao lidar com let e var.
Vamos analisar o processo das perspectivas do compilador e da execução para o código fornecido:

name = 'ashu';
let name;

neste ponto estou deixando claro que quando escrevemos o código javascript, o primeiro analisador e compilador compila nosso código e então ele entra na fase de execução.

Perspectiva do compilador
Primeira linha: nome = 'ashu';

Durante a fase de compilação,
o mecanismo JavaScript analisa o código e cria os escopos necessários.
A atribuição name = 'ashu';

será anotado, mas neste estágio, o mecanismo não executa o código; apenas registra a existência de uma atribuição a uma variável chamada nome.

Se o nome não foi declarado antes, o compilador o trata como uma atribuição a uma variável global (nome var no escopo global), uma vez que as declarações var são içadas e acessíveis globalmente.

Segunda linha: deixe o nome;

Quando o compilador encontra o nome let; declaração, ele reconhece que nome deve ter escopo de bloco.

O compilador coloca o nome na Zona Morta Temporal (TDZ) para o escopo ao qual pertence,
o que significa que reconhece a existência do nome, mas o marca como não inicializado.

A declaração let não é içada da mesma maneira que var.

Em vez disso, ele cria uma ligação no escopo e a inicializa somente quando a declaração é executada.

Perspectiva de execução

Primeira linha: nome = 'ashu';

Quando o mecanismo JavaScript executa a atribuição name = 'ashu';,
verifica a existência de name no escopo atual. Como name é declarado com let, mas está na TDZ (Zona Morta Temporal), qualquer tentativa de acessá-lo antes da declaração let ser inicializada resultará em um ReferenceError.

Portanto, neste ponto, name está na TDZ e a atribuição name = 'ashu'; resulta em um ReferenceError.


Segunda linha: deixe o nome;

Esta linha inicializa a variável name dentro do escopo do bloco.
Após este ponto, nome não estará mais na TDZ e poderá ser acessado ou atribuído sem erros.

Agora dica bônus

diferença entre undeclarar vs indefinido vs não inicializado;

undeclare :- a variável ainda não foi declarada.
indefinido :- Variável declarada mas não inicializada;
não inicializado :- variável definida, mas seu valor virá na parte posterior.

Ex: - resultado const = multiplicarBy2(5);
até que o valor de retorno da função seja atribuído ao resultado, até esse ponto ele estaria em uma zona não inicializada.

fato interessante:-

Você conhece a zona morta temporal inicialmente decorada para Const, mas mais tarde eles foram adotados em **Let**

Referência:-

  1. https://frontendmasters.com/courses/deep-javascript-v3 Minha analogia com o co-piloto do GitHub
Declaração de lançamento Este artigo está reproduzido em: https://dev.to/ashutoshsarangi/unraveling-javascript-a-deep-dive-into-hoisting-temporal-dead-zone-and-variable-states-4d0j?1 Se houver alguma violação , entre em contato com study_golang @163.comdelete
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