Źródło: Arkusze CKE
Co zostanie wypisane w konsoli po wykonaniu poniższego kodu JavaScript?
let a = { value: 10 };
let b = a;
b.value = 20;
console.log(a.value);
Warianty odpowiedzi
-
A
ReferenceError
-
B
20
-
C
undefined
-
D
10
Wyjaśnienie
Kluczem do zrozumienia tego zadania jest wiedza o tym, jak JavaScript przechowuje obiekty w pamięci.
Gdy tworzysz obiekt i przypisujesz go do zmiennej a, zmienna ta nie zawiera samego obiektu, a jedynie adres (referencję) wskazujący miejsce w pamięci komputera.
Pisząc let b = a, nie tworzysz nowego obiektu, a jedynie kopiujesz ten adres. Od tego momentu zmienne a oraz b wskazują na dokładnie ten sam obiekt w pamięci.
Dlatego modyfikacja b.value zmienia wartość w tym wspólnym obiekcie. Gdy potem sprawdzasz a.value, widzisz zmienioną wartość, czyli 20.