1. Passe por valor (por valor)
O valor da variável é copiado e não terá nada a ver com o valor original. Ou seja, mesmo que o novo valor seja modificado, o valor original não será alterado. Em JavaScript, os tipos básicos são passados por valor.
Copie o código do código da seguinte forma:
função testePassValue()
{
var m=1;
var n=2;
//Copie os valores de m e n e passe-os para passValue
passValue(m,n);
alert(m); //será o valor original
}
função passValue(a,b)
{
a = a+b; //Altera o valor de a, aqui a é apenas uma cópia do valor original
alerta(a);
}
Resultado de saída:
3
1
2. Por referência.
Uma cópia da própria referência é passada para a função. O objeto apontado pela referência não é copiado e passado (o mesmo acontece em Java, se o valor do atributo do objeto for alterado, desde o original). a referência aponta para o mesmo objeto, portanto, o valor modificado será acessado através da referência original;
Mas se você apenas apontar a referência para um novo objeto na função, o valor do objeto original não será alterado, apenas a referência copiada será alterada.
Copie o código do código da seguinte forma:
função testePassValue()
{
var data = nova Data(2006,02,27);
alert(date.getDate()); //A saída é 27
//Copie a própria referência de data e passe-a para passReference. Observe que o objeto apontado por data não foi copiado.
passReference(data);
alert(date.getDate()); //A saída é 12
//Igual ao acima
mudançaReferência(data);
alert(date.getDate()); //A saída ainda é 12
}
função passReference(da)
{
//Como da e a referência original apontam para o mesmo objeto, fora da função, o que é acessado através da referência original será o valor do atributo data do objeto, que será o valor modificado.
da.setDate(12);
}
função changeReference(da)
{
//Neste momento, a referência da é na verdade uma cópia da referência original. A reatribuição da referência em si não afetará a referência original.
da=nova Data(2007,05,11);
//Aponta a referência da para um novo objeto. Neste momento, a referência original ainda aponta para o objeto original.
alert(da.getDate()); // A saída é 11
}
3 cordas especiais
Em JavaScript, String também é passado por referência. Existe apenas o método charAt em js, mas nenhum método de modificação correspondente. É o mesmo que String em java e tem imutabilidade.
Copie o código do código da seguinte forma:
var s1 = "olá";
var s2 = "inferno" + "o";
se (s1 == s2)
alert("s1 = s2"); //Esta frase será executada? Pessoas que estão familiarizadas com java podem pensar que ela não será executada (sou bastante crítico em relação a esta frase, ela também é executada em java!), porque em java == compara para identidade. Na verdade, em js, String== compara se os valores são iguais, então esta frase será executada, mas para outras comparações Object ==, é o mesmo que em Java.