Copie par valeur, copie par référence¶
introduction¶
En guise d’introduction, veuillez suivre les instructions suivantes :
partie 1¶
// créez une variable « a » initialisée à 10
var a = 10
// crééz une variable « b » initialisée avec « a »
var b = a
// modifiez la valeur de « a »
var a = 20
// quelle est selon vous la valeur de « b » à ce stade ?
partie 2¶
// créez une variable « a » initialisée avec un objet vide
var a = {}
// crééz une variable « b » initialisée avec « a »
var b = a
// modifiez l'objet associé à « a »
// on lui ajoute une propriété qqch
// ayant comme valeur 10
a.qqch = 10
// quelle est selon vous la valeur de « b » à ce stade ?
Que s’est-il passé ?¶
Dans le cas de valeurs primitive, est effectué ce que l’on appelle une « copie par valeur » : on copie la valeur contenu en mémoire.
Dans le second cas, il s’agit d’une « copie par référence », on copie la référence vers l’espace en mémoire. Les deux variables pointent alors vers la même valeur.
Pas à pas (version complète)¶
// on créé une variable a
// elle n'est pas initialisée
// sa valeur est donc undefined
var a
// on initialise a avec la valeur 10
a = 10
// on créé la variable b
// elle n'est pas initialisée
// sa valeur est undefined
var b
// on assigne à b la valeur de a
var b = a
// on créé un objet c
// avec une propriété valeur égale à 10
var c = { valeur : 10 }
// on créé la variable d
// elle n'est pas initialisée
// sa valeur est undefined
var d
// on assigne à d la *référence* de c
d = c
Conclusion¶
Gardez en tête l’existence de ces deux modes de copie : la copie par valeur et la copie par référence.