A primeira regra de ouro:
O JS não possui escopo em nível de bloco (você pode implementá-lo por si mesmo com fechamentos ou outros métodos), apenas escopo no nível da função. Variáveis fora da função podem ser encontradas na função, mas as variáveis dentro da função não podem ser encontradas fora.
Firstry:
Por que isso? ?
var a = 10; function aaa () {// step-4alert (a); // etapa-5-> Executar alerta, neste momento, você só pode encontrar o exterior a = 10 para que a caixa pop-up 10} function bbb () {// step-2var a = 20; aaa (); // step-3} // definindo passo-1BBB (); // Etapa-1De fato, todo mundo entende o princípio, deve ser apenas uma questão de erros fáceis, e tudo mudará.
Secondtry:
Por que isso? Porque quando A é atribuído B, B ainda não está definido, então A é indefinido e B é 10.
Artigo 2 do Código de Ouro:
A busca por variáveis é o princípio da proximidade. Para encontrar as variáveis definidas pelo VAR, quando não são encontradas nas proximidades, procure a camada externa.
olhar:
Por que isso? Há duas razões para isso: uma é a pré-análise e a outra está pesquisando nas proximidades.
var a = 10; função aaa () {alert (a); // indefinido. Ao procurar por A, você procurará a função. Devido ao efeito do pré-parto, A é indefinido neste momento, para que você nunca procure o 10 var a = 20;/*Preparador var aalert (a); var a = 20;*/} aaa ();atenção:
Vamos verificar o segundo item. Embora seja o princípio da proximidade, é encontrar a variável declarada por Var nas proximidades. Isso ocorre porque as variáveis declaradas pelo VAR são globais. Aqui, o valor de A é apenas modificado. Portanto, o exposto acima é porque o A de var é encontrado na função, então eu saí e o encontrei assim que procurei, então um alertou 10; Mas a verdade é que, depois de A = 20, A tem realmente 20, mas ainda não foi executado quando alertado ~~
Veja ~
O exemplo a seguir verifica ainda mais o escopo da função de JS:
Isso ocorre porque quando o alerta (a), a na função BBB é de fato 20, mas é local para o alerta da frase (a) neste momento. O alerta (a) não consegue encontrar A na função BBB, por isso não pode encontrar A na função AAA, por isso sai e encontra 10.
Artigo 3 do Código de Ouro:
Quando os parâmetros são duplicados com variáveis locais, a prioridade é equivalente.
exemplo:
Além disso: ao passar os parâmetros, o tipo básico passa o valor e o tipo de referência passa a referência. (Mas não é o caso após a reatribuição)
var a = 5; var b = a; b += 3; alerta (a); // 5var a = [1,2,3]; var b = a; b.push (4); alerta (a); // [1,2,3,4];
Não há problema com o código acima, mas o seguinte é diferente.
Como B é transferido, não aponta para a.
Além disso, o escopo de parâmetros e variáveis é semelhante:
Compare esses dois:
Os parâmetros acima são tipos básicos e apenas os valores são transmitidos. A seguir, é apresentado um tipo de referência: (também inclui o caso de reatribuição)