왜 JS에서 재할당과정이 진행될 때 새로운 메모리 주소에 값을 할당하고 새로운 주소를 식별자에게 전달하는 과정을 거칠까?
그냥 지우고 고치면 되지 않을까?
라는 궁금증에서 시작해 이 글을 씁니다.
먼저 변수는 값의 메모리 주소를 갖고 있는 식별자 입니다.
그렇기에 만약 아래와 같은 상황일 때
var a = 10;
var b = a;
a = 20;
저는 b에 a의 값을 할당하고 a를 20으로 재할당하기를 원했습니다.
당연히 위의 출력결과는 a = 20, b = 10이 출력되죠
어떤 과정 때문에 이런 결과가 가능한걸까요?
우선 a가 선언되고 10이 할당되면 10이 할당된 메모리의 주소값을 a가 갖습니다.
그 후 b에 a를 할당하면 a의 주소값을 b가 갖습니다.
그 후 a에 20을 재할당하면 새로운 메모리 공간에 20을 할당한 후 해당 주소값을 a에 전달해줍니다.
이 덕분에 a와 b의 값이 다르게 출력될 수 있는 것이죠
하지만 만약 재할당할때 a의 값을 지우고 다시 쓴다면 b도 a의 주소를 갖고 있었기 때문에
a = 20, b = 20 이라는 제가 원하지 않는 값이 나오겠죠
이 때문에 값을 재할당할때는 값을 지우고 새로 쓰는것이 아닌 새로운 공간에 할당 후 주소값을 변경하는 것입니다.