Sobes.tech
Junior

Jak działa przesyłanie danych przez referencję i przez wartość?

sobes.tech AI

Odpowiedź od AI

Przesyłanie danych przez wartość (by value) i przez referencję (by reference) określa, jak zmienia się oryginalna zmienna podczas przekazywania jej do funkcji lub przypisywania.

Przesyłanie przez wartość:

Tworzona jest kopia wartości zmiennej. Wszelkie zmiany tej kopii wewnątrz funkcji lub podczas przypisania nie wpływają na oryginalną zmienną. Nadaje się do typów danych prymitywnych (liczby, łańcuchy, wartości logiczne, null, undefined, Symbol, BigInt).

// Przesyłanie przez wartość
let a = 10;

function modifyValue(num) {
  num = 20; // Kopia jest modyfikowana
}

modifyValue(a);
console.log(a); // Wyświetli 10 - oryginalna wartość się nie zmieniła

Przesyłanie przez referencję:

Nie przekazuje się samej wartości, lecz referencję (adres w pamięci) do tej wartości. Zmiany dokonane przez tę referencję wpływają na oryginalną zmienną. W JavaScript dotyczy to obiektów (w tym tablic i funkcji). Ważne jest, aby zrozumieć, że nie przekazuje się samego obiektu, lecz referencję do niego. Przy ponownym przypisaniu parametru wewnątrz funkcji, referencji przypisuje się nową wartość, ale oryginalna zmienna nie ulega zmianie.

// Przekazywanie przez referencję (dla obiektów)
let obj1 = { value: 10 };

function modifyObject(obj) {
  obj.value = 20; // Właściwość obiektu jest modyfikowana przez referencję
}

modifyObject(obj1);
console.log(obj1.value); // Wyświetli 20 - oryginalny obiekt się zmienił
// Przykład ponownego przypisania parametru podczas przekazywania obiektu
let obj2 = { value: 10 };

function reassignObject(obj) {
  obj = { value: 30 }; // obj teraz odnosi się do nowego obiektu w lokalnym zakresie funkcji
}

reassignObject(obj2);
console.log(obj2.value); // Wyświetli 10 - oryginalny obiekt się nie zmienił
Charakterystyka Przesyłanie przez wartość Przesyłanie przez referencję
Co jest przekazywane Kopia wartości Referencja do wartości
Wpływ na oryginał Nie Tak (przy zmianie właściwości)
Typy danych w JS Prymitywy Obiekty