데이터는 메모리에 저장된다
메모리는 주소가 있다.
메모리에 저장된 데이터는 주소(값)을 가진다
개발자는 변수를 통해 메모리에 저장된 데이터에 접근한다
자바스크립트의 데이터는 두가지로 나뉜다
데이터 종류에 따라 메모리에 저장되는 방식, 접근하는 방식이 달라진다
let a = 10
변수 a
에 Number 타입 데이터 값 10
을 할당한다 (Number은 원시타입)
데이터 값 10
은 메모리에 저장된다
편의상 저장된 주소를 1번 주소
라고 하자
메모리 주소 | 데이터 |
---|---|
1번 (변수 a) | 10 |
2번 | |
3번 | |
4번 |
let a = 10
let b = 10
a = 20
b
를 할당하면 마찬가지로 데이터가 메모리에 저장되고 변수는 메모리 주소를 가진다a
에 데이터 20
을 재할당하면 새롭게 메모리 주소를 확보한다10
의 메모리는 가비지 컬렉터에 의해 제거된다메모리 주소 | 데이터 |
---|---|
1번 (제거될 메모리 주소) | 10 |
2번 (변수 b) | 10 |
3번 (변수 a) | 20 |
4번 |
원시 타입 데이터는 불변하다. 다시 말해 값이 바뀌지 않는다.
1번 주소
의 데이터는 불변하기 때문에 10
이 20
으로 바뀌지 않는다
불변성을 지키기 위해 새로운 메모리 주소를 확보하고 데이터를 저장한다
메모리 주소 | 데이터 |
---|---|
1번 (변수 a) | 10 ->20 |
2번 (변수 b) | 10 |
3번 | |
4번 |
let a = 10
let b = 10
a = 20
let c = a
만약 변수에 값을 할당할 때 다른 변수
를 할당하면 어떻게 될까?
이를 복사
라고 한다
복사
하면 복사되는 데이터가 새로운 메모리에 할당된다a
와 변수 c
는 독립적으로 별개의 메모리 주소를 가진다메모리 주소 | 데이터 |
---|---|
1번 | |
2번 (변수 b) | 10 |
3번 (변수 a) | 20 |
4번 (변수 c) | 20 |