Maison >interface Web >js tutoriel >Quelle est la différence entre le passage par valeur et le passage par référence en JavaScript ?

Quelle est la différence entre le passage par valeur et le passage par référence en JavaScript ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 13:49:10838parcourir

What's the Difference Between Pass by Value and Pass by Reference in JavaScript?

Passage par référence et valeur en JavaScript

Lors du passage de données à des fonctions en JavaScript, il est crucial de comprendre la différence entre le passage par référence et passer par valeur. Cette distinction affecte la manière dont les données sont partagées et modifiées entre la fonction et l'appelant.

Pass by Value

Pour les types de données primitifs (chaînes, nombres, booléens), JavaScript passe toujours par valeur. Cela signifie qu'une copie de la valeur primitive est créée et transmise à la fonction. Toute modification apportée à la copie dans la fonction n'a aucun effet sur la variable d'origine en dehors de la fonction.

Passage par référence

Les objets (y compris les tableaux) sont passés par référence en JavaScript. Cela signifie que la fonction reçoit une référence à l'objet, pas une copie. Toute modification apportée aux propriétés de l'objet dans la fonction affectera l'objet d'origine en dehors de la fonction.

Exemples

Considérez la fonction suivante :

function f(a, b, c) {
  a = 3;
  b.push("foo");
  c.first = false;
}

Lorsqu'il est appelé avec les arguments suivants :

var x = 4;
var y = ["eeny", "miny", "mo"];
var z = {first: true};
f(x, y, z);

La valeur de x reste inchangée car elle est passée par valeur. Le tableau y d'origine est directement modifié via l'opération push(), donc son contenu change. De même, la première propriété de z est modifiée, affectant l'objet d'origine.

Copie d'objet indépendante

Pour créer une copie totalement indépendante d'un objet, il est nécessaire d'utiliser une méthode qui crée un nouvel objet avec les mêmes valeurs de propriété mais aucune référence à l'original. Une approche courante consiste à utiliser la technique JSON.parse(JSON.stringify()) :

var newObject = JSON.parse(JSON.stringify(originalObject));

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn