1. Passer par valeur (par valeur)
La valeur de la variable est copiée et n'aura rien à voir avec la valeur d'origine, c'est-à-dire que même si la nouvelle valeur est modifiée, la valeur d'origine ne changera pas. En JavaScript, les types de base sont passés par valeur.
Copiez le code comme suit :
fonction testPassValue()
{
variable m=1 ;
variable n = 2 ;
// Copiez les valeurs de m et n et transmettez-les à passValue
valeurpasse(m,n);
alert(m); //sera la valeur d'origine
}
fonction valeurpasse(a,b)
{
a = a+b; //Change la valeur de a, ici a est juste une copie de la valeur originale
alerte(a);
}
Résultat de sortie :
3
1
2. Par référence.
Une copie de la référence elle-même est transmise à la fonction. L'objet pointé par la référence n'est pas copié et transmis (il en va de même en Java, si la valeur de l'attribut de l'objet est modifiée depuis l'original). la référence pointe vers le même objet, par conséquent, la valeur modifiée sera accessible via la référence d'origine ;
Mais si vous pointez simplement la référence vers un nouvel objet dans la fonction, la valeur de l'objet d'origine ne sera pas modifiée, seule la référence copiée sera modifiée.
Copiez le code comme suit :
fonction testPassValue()
{
var date = nouvelle date (2006,02,27);
alert(date.getDate()); //La sortie est 27
// Copiez la référence de date elle-même et transmettez-la à passReference. Notez que l'objet pointé par date n'a pas été copié.
passRéférence(date);
alert(date.getDate()); //La sortie est 12
//Idem que ci-dessus
changeReference(date);
alert(date.getDate()); //La sortie est toujours 12
}
fonction passReference(da)
{
//Puisque da et la référence d'origine pointent vers le même objet, en dehors de la fonction, ce qui est accessible via la référence d'origine sera la valeur de l'attribut date de l'objet, qui sera la valeur modifiée.
da.setDate(12);
}
fonction changeReference(da)
{
//À l'heure actuelle, la référence da est en fait une copie de la référence d'origine. La réaffectation de la référence elle-même n'affectera pas la référence d'origine.
da= nouvelle date (2007,05,11) ;
//Pointez la référence da vers un nouvel objet. À ce stade, la référence d'origine pointe toujours vers l'objet d'origine.
alert(da.getDate()); // La sortie est 11
}
3 cordes spéciales
En JavaScript, String est également passé par référence. Il n'y a que la méthode charAt en js, mais aucune méthode de modification correspondante. Elle est la même que String en Java et est immuable.
Copiez le code comme suit :
var s1 = "bonjour" ;
var s2 = "enfer" + "o" ;
si (s1 == s2)
alert("s1 = s2"); //Cette phrase sera-t-elle exécutée ? Les gens qui connaissent Java peuvent penser qu'elle ne sera pas exécutée (je suis assez critique envers cette phrase, elle est également exécutée en Java !), car en Java == compare l'identité. En fait, String== en js compare si les valeurs sont égales, donc cette phrase sera exécutée. Mais pour les autres Object == les comparaisons sont les mêmes qu'en Java.