기본형은 값이 담긴 주솟값을 바로 복제하는 반면, 참조형은 값이 담긴 주솟값들로 이뤄진 묶음을 가리키는 주솟값을 복제한다.
기본형은 불변값이다.
var a = 'abc';와 같은 문자열을 저장할때, 해당 위치에 문자열 'abc'를 직접 저장하지 않는다.| 1002 | 1003 | 1004 |
|---|---|---|
| 이름: a | ||
값: @5004 |
||
| 5002 | 5003 | 5004 |
| 'abc' |
한 번 만들어진 불변값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않는다.
참조형의 데이터 할당 방법
var obj1 = {
a: 1,
b: 'bbb'
};
@5001은 변하지 않는다. 7103번이 바라보고 있는 주소값만 변경된다.| (변수영역) 주소 | 1001 | 1002 | 1003 | 1004 |
|---|---|---|---|---|
| 데이터 | 이름: obj1 | |||
값: @5001 |
||||
| (데이터영역) 주소 | 5001 | 5002 | 5003 | 5004 |
| 데이터 | @7103 ~ ? |
1 | 'bbb' | |
(객체 @5001의 변수 영역) 주소 |
7103 | 7104 | 7105 | 7106 |
| 데이터 | 이름: a | |||
값: @5003 |
이름: b | |||
값: @5004 |
'abc'의 마지막에 'def'를 추가하려고 하면,'abcdef'로 수정하지 않는다.'abcdef'라는 문자열을 새로 만들어 별도의 공간에 저장한다.