1. O espaço de memória em JS é dividido em dois tipos: Memória de pilha e memória de heap
Memória da pilha: fornece um ambiente para a execução do código JS; armazena os valores dos tipos de dados básicos; -> Escopo global ou escopo privado são na verdade a memória da pilha
Memória da heap: armazena o valor do tipo de dados de referência (o objeto armazena o nome do atributo e o valor do atributo, e a função armazena o código no corpo da função como uma string)
2. Quando o navegador carrega nossa página HTML, ele fornecerá um ambiente para a execução do código JS -> Escopo Global (Global-> Window)
3. Antes de o código JS ser executado, o navegador precisa fazer algumas coisas por si só: declarar ou definir todas as palavras -chave VAR/função com antecedência -> "pré -explicação" (som variável)
Declare -> Diga ao navegador que eu tenho tal coisa, como var num1; função fn;
Definido -> atribuir valor à variável ou função declarada, por exemplo, num1 = 12; fn = function () {}
[IMPORTANTE] As variáveis declaram apenas que não estão definidas, o valor padrão é indefinido (indefinido)
4. O processamento de VAR e função é diferente no estágio de pré-interpretação.
var -> Quando a pré -explicação é realizada, a variável é declarada antecipadamente. A operação de atribuição será concluída apenas quando o código for executado.
Função -> Durante a pré -explicação, todas as declarações e definições serão concluídas com antecedência (quando o código for executado, ele será ignorado diretamente)
[Importante] No início, apenas as pré-interpretações são realizadas na janela. As cordas atuais armazenadas na função FN são todas as cordas; portanto, o VAR Total não tem significado prático; portanto, as pré-interpretações não são realizadas-> "pré-interpretações ocorrem no escopo atual"
console.log (obj); //-> var obj indefinido = {name: "Zhang Shanshan", idade: 10}; função fn (num1, num2) {// pula diretamente quando o código é executado nessa linha, porque durante a pré-explicação, concluímos a declaração e definição var total = num1 + num2; console.log (total); } var num1 = 12; fn (num1, 100); // execute fn, atribua o valor da variável global num1 ao parâmetro num1 e atribua 100 ao parâmetro num25. A variável declarada no escopo global é uma variável global
Variáveis declaradas no escopo privado são variáveis privadas; Parâmetros formais de funções também são variáveis privadas;
Como saber se as variáveis que aparecem em uma função são privadas ou globais?
Primeiro, veja se é um parâmetro formal e, em seguida, veja se foi declarado no escopo privado (variado). Um dos dois é uma variável privada. Então, não importa onde apareça na função atual, ela é privada e não há relação entre ela e a global; Se também não é, significa que não é privado e procure o escopo anterior ...
6. Quando a função é executada, um novo escopo privado (memória da pilha) será formado para que o código no corpo da função seja executado;
1) Atribuir valor aos parâmetros formais
2) pré-interpretação sob escopo privado
3) Execução de código sob escopo privado
O novo escopo privado formado também protege as variáveis privadas de influências externas. Colocamos este mecanismo de proteção da função -> "Fechamento
Diferença: aqueles com VAR podem ser declarados antes que o código seja executado, enquanto aqueles sem Var não podem ser declarados antecipadamente
1. A pré-explicação é necessária, independentemente de as condições serem verdadeiras ou não.
pré-explicação da janela: var a; -> window.a; if (! ("A" na janela)) {// "a" na janela -> true var a = "us"; } console.log (a); //-> indefinido2. A pré-interpretação ocorre apenas no lado esquerdo de "=", apenas o lado esquerdo é pré-interpretação e o lado direito é o valor sem pré-interpretação.
Expressão da função das funções anônimas: atribua a parte da definição da função como um valor a um evento que é uma variável ou elemento.
Quando pré-explicação: var fn; -> O valor padrão de FN é indefinido
fn (); //-> undefined () não-Esgot TypeError: fn não é uma função Somente funções podem ser executadas em js && se o código acima acima JS for relatado, o código abaixo não será executado sem nenhum processamento especial var fn = function () {console.log ("ok"); }; fn (); Quando pré-explicação: fn = xxxfff000 fn (); //-> "ok" função fn () {console.log ("ok"); } fn (); //-> "ok" função fn () {console.log ("ok"); } fn (); //-> "ok"3. O código abaixo do retorno no corpo da função não é mais executado, mas o código abaixo precisa participar da pré-explicação; e as coisas por trás do retorno precisam ser processadas, mas como é retornado como um valor, a pré-explicação não é realizada;
var total = 300; função fn () {console.log (total); Retornar a função sum () {}; // retornar é retornar o valor na função à parte externa da função, que retorna o endereço de memória correspondente à função à parte externa da função, por exemplo: retornar xxxfff111; O código abaixo retorna no corpo da função não está executando var total = 10; } fn ();4. A função da função anônima não é pré-explicada sob o escopo global.
A função auto-executada da função anônima: a definição e a execução são concluídas juntas
(function (num) {}) (100);
5. Quando pré-explicação, se o nome for repetido, ele será declarado apenas uma vez e não repetido, mas a tarefa ainda será repetida.
Se o nome de uma variável e o nome de uma função são os mesmos que o nome de uma função em JS, é considerado repetido
Pré-explicação:
var fn; declarar fn = xxxfff000; [Declaração] não + defina fn = xxxfff111; [Declaração] Não + definição -> fn = xxxfff111 var fn = 12; // window.fn = 12 função fn () {//window.fn=function () {}} função fn () {}O exposto acima são todos os entendimentos relevantes sobre a pré-explicação do JS trazida a você pelo editor. Espero que você apoie mais wulin.com ~