Przekazywanie danych przez wartość lub referencję w JavaScript

W JavaScript, sposób przekazywania danych – czy to przez wartość, czy przez referencję – zależy od typu danych, z którymi pracujemy. Rozumienie różnicy między tymi dwoma sposobami jest kluczowe dla efektywnego i błędnego zarządzania danymi w aplikacjach.

Przekazywanie przez wartość

Przekazywanie przez wartość dotyczy typów prostych, takich jak liczby, stringi, wartości logiczne (boolean). Kiedy przekazujemy dane tego typu do funkcji lub przypisujemy je do innej zmiennej, JavaScript kopiuje wartość i pracuje na tej kopii.

let myNumber = 10;
let anotherNumber = myNumber; // Kopia wartości została zapisana do zmiennej

anotherNumber = 20;
console.log(myNumber); // 10, wartość nie została zmieniona
console.log(anotherNumber); // 20, nowa wartość kopii

W tym przypadku, zmiana wartości anotherNumber nie wpływa na wartość zmiennej myNumber, ponieważ dane zostały przekazane przez wartość.

Przekazywanie przez referencję

Przekazywanie przez referencję dotyczy typów złożonych, takich jak obiekty, tablice i funkcje. W tym przypadku, zamiast kopiować wartości, JavaScript przekazuje adres pamięci, w której przechowywany jest obiekt. Oznacza to, że zmiany dokonane na obiekcie w jednym miejscu będą widoczne w całym programie.

let myObject = {name: "Alice"};
let anotherObject = myObject; // Przekazanie przez referencję
                              // czyli obie zmienne wskazują na 
                              // to samo miejsce w pamięci

anotherObject.name = "Bob";
console.log(myObject.name); // "Bob", wartość została zmieniona

Tutaj, zmiana właściwości name w anotherObject wpływa również na myObject, ponieważ obie zmienne odnoszą się do tego samego obiektu w pamięci.

Jak to wpływa na pracę z funkcjami?

Kiedy przekazujemy obiekty do funkcji, zmiany dokonane na tych obiektach wewnątrz funkcji wpłyną na obiekty poza funkcją, ponieważ przekazujemy ich referencje.

function updateName(obj) {
    obj.name = "Charlie";
}

updateName(myObject);
console.log(myObject.name); // "Charlie"

Jak widać funkcja przyjmująca referencję do obiektu może go zmodyfikować.

Podsumowanie

Rozumienie różnicy między przekazywaniem przez wartość a przez referencję jest kluczowe dla efektywnego zarządzania danymi w JavaScript. Pozwala to na świadome decyzje dotyczące zarządzania stanem aplikacji, unikanie nieoczekiwanych efektów ubocznych oraz efektywne wykorzystanie pamięci i zasobów.

Jeżeli chcesz przyśpieszyć swoją naukę chciałbym polecić mój kurs video JavaScript w którym nauczysz się tego języka od podstaw do zaawansowanych jego koncepcji.

 

 

 

 

 

Scroll to Top