Copie par valeur, copie par référence ##################################### introduction ************ En guise d'introduction, veuillez suivre les instructions suivantes : partie 1 ======== .. code-block:: javascript // 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 ======== .. code-block:: javascript // 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) ============================ .. figure:: images/copies--1.svg :alt: étape 1 :align: center ---- .. code-block:: javascript // on créé une variable a // elle n'est pas initialisée // sa valeur est donc undefined var a .. figure:: images/copies--2.svg :alt: étape 2 :align: center ---- .. code-block:: javascript // on initialise a avec la valeur 10 a = 10 .. figure:: images/copies--3.svg :alt: étape 3 :align: center ---- .. code-block:: javascript // on créé la variable b // elle n'est pas initialisée // sa valeur est undefined var b .. figure:: images/copies--4.svg :alt: étape 4 :align: center ---- .. code-block:: javascript // on assigne à b la valeur de a var b = a .. figure:: images/copies--5.svg :alt: étape 5 :align: center ---- .. code-block:: javascript // on créé un objet c // avec une propriété valeur égale à 10 var c = { valeur : 10 } .. figure:: images/copies--6.svg :alt: étape 6 :align: center ---- .. code-block:: javascript // on créé la variable d // elle n'est pas initialisée // sa valeur est undefined var d .. figure:: images/copies--7.svg :alt: étape 7 :align: center ---- .. code-block:: javascript // on assigne à d la *référence* de c d = c .. figure:: images/copies--8.svg :alt: étape 8 :align: center Conclusion ********** Gardez en tête l'existence de ces deux modes de copie : la **copie par valeur** et la **copie par référence**.