Appliquer la notion

On se donne le script JavaScript suivant :

1
function changeIdentity (age, names) {
2
  age = age + 12
3
  // Suppression des valeurs existantes
4
  names.splice(0, names.length)
5
  // Ajout de nouvelles valeurs
6
  names.push('John')
7
  names.push('Albert')
8
  names.push('Smith')
9
}
10
11
let age = 23
12
let names = ['Luke', 'George', 'Simpsons']
13
14
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 :

1
console.log(age, names)

On obtient les valeurs :

1
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 :

1
console.log(age, names)

On obtient les valeurs :

1
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.