Jak rozumiesz, czym jest przekazanie przez referencję?
sobes.tech AI
Odpowiedź od AI
W JavaScript, typy danych podstawowych (łańcuchy, liczby, wartości logiczne, null, undefined, Symbol, BigInt) są przekazywane przez wartość. Oznacza to, że podczas przypisywania lub przekazywania do funkcji, kopiuje się sama wartość.
Obiekty (w tym tablice i funkcje) są przekazywane i kopiowane przez referencję. W rzeczywistości, kopiowana jest nie sama obiekt, lecz odniesienie do obszaru pamięci, w którym jest przechowywany.
// Przekazywanie przez wartość
let a = 10;
let b = a; // Kopiuje wartość 10
b = 20;
console.log(a); // 10, zmiana 'b' nie wpływa na 'a'
// Przekazywanie przez referencję
let obj1 = { value: 10 };
let obj2 = obj1; // Kopiuje odniesienie do obiektu
obj2.value = 20;
console.log(obj1.value); // 20, zmiana przez 'obj2' wpływa na 'obj1', ponieważ wskazują na ten sam obiekt
Przekazując obiekt do funkcji, funkcja otrzymuje kopię odniesienia. Zmiana właściwości obiektu wewnątrz funkcji wpłynie na oryginalny obiekt, ponieważ odniesienie jest takie samo. Jednak, jeśli wewnątrz funkcji przypiszemy nowy obiekt do zmiennej, oryginalny obiekt pozostanie niezmieniony, ponieważ odniesienie będzie wskazywać na inną przestrzeń pamięci.
function modifyObject(obj) {
obj.newValue = 30; // Modyfikuje oryginalny obiekt
}
function assignNewObject(obj) {
obj = { anotherValue: 40 }; // Zmienna 'obj' wewnątrz funkcji wskazuje teraz na nowy obiekt
}
let myObject = { initialValue: 10 };
modifyObject(myObject);
console.log(myObject); // { initialValue: 10, newValue: 30 }
let anotherObject = { initialValue: 10 };
assignNewObject(anotherObject);
console.log(anotherObject); // { initialValue: 10 }, oryginalny obiekt nie zmienił się