O escopo do JavaScript sempre foi um ponto de conhecimento difícil de entender no desenvolvimento do front-end. Lembre -se de algumas palavras sobre o escopo do JavaScript. Você não tem medo de viajar pelo mundo ...
1. "Sem escopo no nível de bloco em JavaScript"
Há um escopo de nível de bloco em Java ou C#, ou seja, os aparelhos também são um escopo.
public static void main () {if (1 == 1) {string name = "seven";} system.out.println (nome);} // relate um erro public static void main () {if (1 == 1) {string name = "sete";} console.writeLine (name);} // relatório um erro um erro = "sete";Sem escopo no nível de bloco em JavaScript
função main () {if (1 == 1) {var name = 'sete';} console.log (nome);} // saída: sete2. JavaScript adota o escopo da função
No JavaScript, cada função atua como um escopo e as variáveis no escopo interno não podem ser acessadas externamente.
function main () {var inerValue = 'sete';} main (); console.log (inervalue); // erro: referência não capturada: innervalue não é definido3. Cadeia de escopo JavaScript
Como cada função no JavaScript é um escopo, se uma função aninhada aparecer, uma cadeia de escopo aparecerá.
Xo = 'Alex'; função func () {var XO = "sete"; função interna () {var Xo = 'alvin'; console.log (xo);} interna ();} func ();Por exemplo, o código acima aparece na cadeia de escopo composta por três escopos. Se a corrente do escopo aparecer, o pedido aparecerá ao procurar variáveis. Para o exemplo acima:
Quando o Console.log (XO) é executado, sua ordem de pesquisa é pesquisar de dentro para fora, de acordo com a prioridade da cadeia de escopo. Se a camada interna não existir, ela gradualmente procurará até que nenhuma exceção seja encontrada.
425762-20160707114743577-37359182.png
4. A cadeia de escopo de JavaScript foi criada antes da execução
O escopo do JavaScript foi criado antes de ser executado. Quando é executado no futuro, você só precisa pesquisar de acordo com a cadeia do escopo.
Exemplo 1:
Xo = 'Alex'; função func () {var XO = "sete"; função interna () {console.log (xo);} retornar interna;} var ret = func (); ret (); // resultado de saída: sete: seteO código acima já existe antes que a função seja chamada:
Escopo global -> Escopo de função Func -> Escopo de função interna
Ao executar [ret ();], uma vez que se refere à função interna, a cadeia de escopo dessa função foi definida como: escopo global -> Escopo da função func -> Escopo de função interna; portanto, ao executar [ret ();], as variáveis serão encontradas com base na cadeia de escopo existente.
Exemplo 2:
Xo = 'Alex'; função func () {var XO = "eirc"; function interna () {console.log (xo);} xo = 'sete'; retorna interno;} var ret = func (); ret (); // resultado de saída: sete: seteO código acima tem o mesmo objetivo que o Exemplo 1 e também enfatiza que a cadeia de escopo já existe antes que a função seja chamada:
Escopo global -> Escopo de função Func -> Escopo de função interna
Diferentemente, ao executar [var ret = func ();], o valor da variável XO no escopo do func foi redefinido para "sete" de "Eric", então, ao executar [ret ();] mais tarde, você só pode encontrar "sete".
Exemplo 3:
XO = 'Alex'; barra de função () {console.log (xo);} função func () {var xo = "sete"; barra de retorno;} var ret = func (); ret (); // resultado de saída: AlexNo código acima, duas cadeias de escopo foram criadas antes que a função seja executada:
Escopo global -> escopo da função de barra
Escopo global -> Escopo de função Func
Ao executar [ret ();], o retiro refere -se à função da barra e a cadeia de escopo da função da barra já existe: escopo global -> escopo da função de barra; portanto, ao executar, ela será pesquisada com base na cadeia de escopo existente.
5. declaração antecipada
Se você não criar variáveis e usá -las diretamente no JavaScript, será relatado um erro:
console.log (xxoo); // Erro: Uncathed ReferenceError: XXOO não está definido
Em JavaScript, se um valor for criado sem atribuir um valor, o valor será indefinido, como:
var xxoo; console.log (xxoo); // saída: indefinido
Se isso for escrito na função:
function foo () {console.log (xo); var xo = 'sete';} foo (); // saída: indefinidoO código acima não relata um erro, mas produz a indefinição. O motivo é que, antes que as funções JavaScript sejam executadas, elas declararão todas as variáveis nelas sem atribuir valores. Portanto, é equivalente ao exemplo acima que a função já executou VAR XO quando "pré -compilado"; Portanto, a saída do código acima é indefinida.
O exposto acima é o que o editor apresentou a você para resolver o escopo JavaScript (clássico) em apenas cinco frases. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!