let a = 5 let b = a a = 3 //a에 3을 재할당. console.log(a) console.log(b) //출력 a = 3 , b = 5
처음에 b를 선언했을 때 a를 할당 했는데 3이 나오지 않고
왜 5가 나올까?
밑에 다른 예를 살펴보자.
let a = { name = "사과", } let b = a a.name = "딸기" console.log(a) console.log(b) //출력 a = "딸기", b = "딸기"
첫번째 예시를 봤을 때, a를 재할당해도 b의 값은 변하지 않았다.
하지만 두번째 예시에서 b는 a의 값을 따라갔는데 어떻게 된 걸까?
obj, array, functio은 데이터의 값이 아닌 데이터의 위치를 나타내주는 주소 값이 변수와 함께 메모리에 저장된다.
그래서 변수를 불러올때는 주소값을 통해 실제 obj의 데이터가 저장된 heap이라는 공간으로 들어가 데이터를 찾게된다.
b = a를 선언하면 a의 주소값이 저장되기 때문에 b와 a는 같은 주소를 갖고있고 a의 데이터를 변경한다면 주소값이 아닌 heap 안에 있는 데이터를 변경하기 때문에 같은 주소값을 갖고 있는 b도 변경되는 것이다.