Hoje eu respondi uma pergunta sobre o JavaScript, que envolve problemas de atribuição, por isso quero resumir esse problema com cuidado.
A cópia do código é a seguinte:
var a = 'teste';
var b = function () {};
ba = 'teste';
mudança de função (m, n) {
m = 'mudança';
na = 'alteração';
}
mudança (a, b);
Os valores das variáveis A e B mudarão após a execução do código acima?
Valores originais e referenciados
Eu introduzi o valor original e o valor de referência em artigos anteriores. O valor original refere -se a indefinidos, nulos, booleanos, número, string, etc., que são armazenados na pilha, enquanto o valor de referência é integrado do objeto, que é armazenado no heap.
Aqui precisamos distinguir os dois:
A cópia do código é a seguinte:
var a = 'teste';
var b = new string ('teste');
var a = 'true';
var b = novo booleano ('true');
Para as quatro variáveis acima, A e A são os valores originais, enquanto B e B são os valores de referência.
Mecanismo de atribuição
Depois de esclarecer a diferença entre o valor original e o valor de referência, você pode apresentar o mecanismo de atribuição de JavaScript em detalhes:
No JavaScript, cada tarefa gerará uma cópia para variáveis do tipo de valor original e, para valores referenciados, como seu nome, é atribuído por referência à memória do mesmo objeto de armazenamento.
Atribuição do valor original:
A cópia do código é a seguinte:
var a = 1; // valor original
var b = a; // gerar uma cópia para a variável b
b = 2; // não relacionado a um
alerta (a); // saída 1
Atribuição de valores referenciados:
A cópia do código é a seguinte:
var a = new Object (); // Valor de referência
Ax = 1;
var b = a; // atribuição de referência, apontando para a mesma memória
Bx = 2; // A modificação de B afetará um
alerta (ax); // saída 2
PASSO DE PARAMETRO
Agora, vamos dar uma olhada em como lidar com a passagem de dois tipos de valores para funcionar parâmetros ao mesmo tempo.
1. Passe o valor original
A cópia do código é a seguinte:
var a = 1;
teste de função (m) {
m = 2;
}
testa);
alerta (a); // saída 1
A saída é 1, por isso sabemos que a função passa apenas o valor da variável em; portanto, M no corpo da função obtém o valor 1 e é atribuído a 2. Esse processo não afeta a variável externa a.
2. Passe o valor de referência
A cópia do código é a seguinte:
var a = new Object ();
Ax = 1
teste de função (m) {
Mx = 2;
}
testa);
alerta (ax); // saída 2
A saída é 2, por isso sabemos que a função passa o endereço da variável, então M no corpo da função recebe o endereço passado. Portanto, quando o atributo x for atribuído a 2, ele também afetará um apontamento para o mesmo endereço de memória.
Resumir
Agora vamos voltar à pergunta de abertura:
A cópia do código é a seguinte:
var a = 'teste';
var b = function () {};
ba = 'teste';
mudança de função (m, n) {
m = 'mudança';
na = 'alteração';
}
mudança (a, b);
A variável A é o valor original, a variável B é o valor de referência e um é passado para o corpo da função como um valor e o outro é o endereço; portanto, após a execução da função, a variável A não será alterada e o valor da variável B mudará.