JavaScript Fundamentals

Passage de paramètres en JavaScript : passage par valeur et passage par référence

Spread the love

La gestion des paramètres en JavaScript est une source fréquente de confusion, souvent débattue comme étant soit du passage par référence, soit du passage par valeur. La réalité est plus nuancée : JavaScript utilise un mécanisme qui combine des aspects des deux, selon le type de données impliqué.

Table des matières

Comprendre le passage par valeur avec les types primitifs

Les types de données primitifs de JavaScript — number, string, boolean, null, undefined, bigint, et symbol — fonctionnent avec un passage par valeur. Lorsqu’un type primitif est passé à une fonction, une copie de sa valeur est créée et passée. Les modifications effectuées dans la fonction n’affectent que cette copie, laissant la variable originale inchangée.


let x = 10;

function changeValue(y) {
  y = 20;
}

changeValue(x);
console.log(x); // Sortie : 10

Dans cet exemple, modifier y à l’intérieur de changeValue ne modifie pas le x original.

Comprendre le passage par référence avec les objets

Les objets en JavaScript (y compris les tableaux et les fonctions) se comportent différemment. Lorsqu’un objet est passé à une fonction, ce qui est passé est une référence — un pointeur vers l’emplacement mémoire de l’objet. Par conséquent, toutes les modifications apportées aux propriétés de l’objet *à l’intérieur* de la fonction affectent directement l’objet original.


let myArray = [1, 2, 3];

function modifyArray(arr) {
  arr.push(4);
}

modifyArray(myArray);
console.log(myArray); // Sortie : [1, 2, 3, 4]

Ici, myArray est modifié car la fonction modifie l’objet lui-même, et non une copie.

Cependant, une distinction cruciale existe : la réaffectation du paramètre à un *nouvel* objet à l’intérieur de la fonction ne modifie pas l’original.


let myObject = { a: 1 };

function reassignObject(obj) {
  obj = { a: 2 }; // Affectation d'un nouvel objet
}

reassignObject(myObject);
console.log(myObject); // Sortie : { a: 1 }

À l’intérieur de reassignObject, obj pointe vers un objet différent ; le myObject original reste inchangé.

Réconcilier le passage par valeur et le passage par référence en JavaScript

Le passage de paramètres en JavaScript n’est ni l’un ni l’autre de manière stricte. C’est un système dépendant du contexte :

  • Types primitifs : Passage par valeur. Une copie de la valeur est passée ; les modifications internes n’affectent pas l’original.
  • Objets : Passage par référence. Une référence à l’objet est passée ; les modifications apportées aux propriétés de l’objet affectent l’original. La réaffectation du paramètre à un nouvel objet à l’intérieur de la fonction laisse l’original intact.

Maîtriser cette distinction est crucial pour écrire du code JavaScript robuste et prévisible. Le comportement dépend entièrement du fait que vous travaillez avec des types primitifs ou des objets.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *