Sobes.tech
Junior

Comment comprends-tu ce qu'est le passage par référence?

sobes.tech IA

Réponse de l'IA

En JavaScript, les types de données primitifs (chaînes, nombres, valeurs booléennes, null, undefined, Symbol, BigInt) sont transmis par valeur. Cela signifie que lors de l'affectation ou du passage à une fonction, la valeur elle-même est copiée.

Les objets (y compris les tableaux et les fonctions) sont transmis et copiés par référence. En réalité, ce n'est pas l'objet lui-même qui est copié, mais la référence à la zone mémoire où il est stocké.

// Passage par valeur
let a = 10;
let b = a; // La valeur 10 est copiée
b = 20;
console.log(a); // 10, changer 'b' n'affecte pas 'a'

// Passage par référence
let obj1 = { value: 10 };
let obj2 = obj1; // La référence à l'objet est copiée
obj2.value = 20;
console.log(obj1.value); // 20, changer via 'obj2' affecte 'obj1' car ils pointent vers le même objet

Lorsqu'on passe un objet à une fonction, la fonction reçoit une copie de la référence. Modifier les propriétés de l'objet à l'intérieur de la fonction affectera l'objet original, car la référence est la même. Cependant, si la fonction assigne un nouvel objet à la variable, l'objet original restera inchangé, car la référence pointera vers une autre zone mémoire.

function modifyObject(obj) {
  obj.newValue = 30; // Modifie l'objet original
}

function assignNewObject(obj) {
  obj = { anotherValue: 40 }; // La variable 'obj' dans la fonction pointe maintenant vers un nouvel objet
}

let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }

let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, l'objet original n'a pas changé