[JavaScript]변수선언과 Obj참조에 관하여

HyeonWoo Jang·2022년 8월 4일
0

JavaScript

목록 보기
1/2

🚀프로그래밍에서 변수란 하나의 값을 메모리에 저장하는 저장공간이라 할 수 있다.

✅변수를 선언하는 3가지 방법

  • var: 중복선언 가능,재할당 가능, 함수를 제외한 곳에서 선언시 전역변수처럼 사용 가능. 버그의 주요원인이 될 수 있기에 사용하지 않는 것이 좋다.
  • let: 중복선언 불가능, 재할당 가능 스코프 내부에서 선언 시에 외부에서 사용 불가.
  • const: let과 같지만 재할당이 불가하다.
let a = 5
let b = a 
a = 3 //a에 3을 재할당.
console.log(a)
console.log(b)
//출력 a = 3 , b = 5

처음에 b를 선언했을 때 a를 할당 했는데 3이 나오지 않고
왜 5가 나올까?

  • b라는 메모리에 데이터 값을 5로 저장했기 때문이다.
    그래서 변수를 선언하고 메모리에 저장했을 시 b는 a와 별개의 값이 된다.
    즉, b = a는 a의 현재의 값을 저장한다.

📢위의 내용으로 변수는 선언과 동시에 할당 된 데이터의 값을 가진다고 알 수 있다.

밑에 다른 예를 살펴보자.

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도 변경되는 것이다.

0개의 댓글