Maison > interface Web > js tutoriel > Comment JavaScript gère-t-il le passage par valeur et le passage par référence avec les types et objets primitifs ?

Comment JavaScript gère-t-il le passage par valeur et le passage par référence avec les types et objets primitifs ?

Patricia Arquette
Libérer: 2024-12-18 12:54:11
original
952 Les gens l'ont consulté

How Does JavaScript Handle Pass-by-Value and Pass-by-Reference with Primitive Types and Objects?

JavaScript Pass-by-Value vs. Pass-by-Reference

En JavaScript, toutes les variables sont passées par valeur, ce qui signifie qu'une copie de la valeur d'origine est créé et transmis à la fonction. Cependant, lorsque la valeur est un objet, tel qu'un tableau ou un objet littéral, la copie est une référence à l'objet d'origine.

Impact sur les arguments de fonction

  • Primitive : Lorsqu'une primitive (par exemple, un nombre, une chaîne) est transmise à une fonction, toute modification apportée à cette valeur dans le La fonction est limitée à la portée locale de la fonction et n'affecte pas la variable d'origine en dehors de la fonction.
  • Référence d'objet : Lorsqu'une référence d'objet est transmise à une fonction, les modifications apportées à la les propriétés de l'objet au sein de la fonction sont reflétées dans l'objet d'origine, même en dehors de la fonction.

Impact sur les variables extérieures Fonctions

  • Pass-by-Reference : Les références d'objet sont passées par référence, ce qui signifie que les modifications apportées aux propriétés de l'objet dans une fonction affecteront les propriétés de l'objet d'origine, mais toute modification apportée à la référence elle-même (par exemple, réaffectation) au sein de la fonction n'affecte pas l'original variable.
  • Pass-by-Value : Les valeurs primitives et les références d'objet transmises par valeur n'affectent pas la variable d'origine en dehors de la fonction.

Exemples

function f(a, b, c) {
  a = 3; // Reassignment changes the local variable only.
  b.push("foo"); // Property change affects the original object.
  c.first = false; // Property change affects the original object.
}

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

console.log(x, y, z.first); // Output: 4, ["eeny", "miny", "mo", "foo"], false
Copier après la connexion

Dans l'exemple ci-dessus, les modifications apportées aux objets b et c sont reflétées dans les objets d'origine, tandis que la réaffectation de a n'a aucun effet.

Exemples détaillés :

function f() {
  const a = ["1", "2", { foo: "bar" }];
  const b = a[1]; // Copy the reference to the original array element
  a[1] = "4"; // Change the value in the original array
  console.log(b); // Output: "2" (Original value of the copied reference)
}
Copier après la connexion

Dans le premier exemple, même si a a été modifié, b est toujours valable la valeur d'origine car il s'agit d'une copie de la référence.

function f() {
  const a = [{ yellow: "blue" }, { red: "cyan" }, { green: "magenta" }];
  const b = a[1]; // Copy the reference to the original object
  a[1].red = "tan"; // Change the property in the original object
  console.log(b.red); // Output: "tan" (Property change is reflected in both variables)
  b.red = "black"; // Change the property through the reference
  console.log(a[1].red); // Output: "black" (Property change is reflected in both variables)
}
Copier après la connexion

Dans le deuxième exemple, le changement en a[1].red affecte à la fois a et b car ils partagent la même référence d'objet.

Création de copies indépendantes

Pour créer une copie entièrement indépendante d'un objet, vous pouvez utiliser JSON.parse() et JSON.stringify( ) méthodes pour désérialiser et sérialiser l'objet respectivement. Par exemple :

const originalObject = { foo: "bar" };
const independentCopy = JSON.parse(JSON.stringify(originalObject));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal