Appliquer la notion
On se donne le script JavaScript suivant :
function changeIdentity (age, names) {
age = age + 12
// Suppression des valeurs existantes
names.splice(0, names.length)
// Ajout de nouvelles valeurs
names.push('John')
names.push('Albert')
names.push('Smith')
}
let age = 23
let names = ['Luke', 'George', 'Simpsons']
changeIdentity(age, names)
Question
Modifier le script pour obtenir les valeurs de age
et de names
à la fin de l'exécution du script.
Quelles sont-elles ?
Solution
On ajoute l'instruction suivante à la fin du programme :
console.log(age, names)
On obtient les valeurs :
35, ['John', 'Albert', 'Smith']
Question
Modifier le script pour obtenir les valeurs de age
et de names
à la fin de l'exécution de changeIdentity
.
Quelles sont-elles ?
Solution
On ajoute l'instruction suivante à la fin de la fonction :
console.log(age, names)
On obtient les valeurs :
23, ['John', 'Albert', 'Smith']
Question
Comment expliquer les résultats précédents ?
Solution
La variable age
référence un type primitif, tandis que la variable names
référence un type composé. Ainsi, dans et en dehors de la fonction :
La variable
age
n'a pas la même référence ; ici la variable est passée par valeur puisque c'est un type primitif (un entier) : cela explique pourquoi sa valeur n'est pas affectée.
La variable
names
a la même référence ; la variable est passée par référence puisque c'est un type composé (un tableau) : cela explique pourquoi sa valeur est changée.