기본형은 값이 담긴 주솟값을 바로 복제하는 반면, 참조형은 값이 담긴 주솟값들로 이뤄진 묶음을 가리키는 주솟값을 복제한다.
기본형은 불변값이다.
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'
라는 문자열을 새로 만들어 별도의 공간에 저장한다.