<aside> 💡 기본형 데이터는 모두 불변값이다.
</aside>
다음과 같이 변수의 할당값을 변경하려는 시도는 값 자체를 바꾸는 게 아니라, 변경된 값을 새로 만들어 데이터 영역에 저장하고 그 주소만 변경하게 된다. 즉, 기존 값은 절대로 변경되지 않는다.
var a = 'abc'
a = a + 'def'
// 'abc'의 값이 변화하는 것이 아닌, 새로 'abcdef'의 값을 만들거나 재활용함.
// 즉 'abc'는 절대로 변화하지 않음.
var b = 1
var c = 1 // b의 데이터 영역 주소값을 재활용
b = 7 // 1이 변화하는 것이 아닌, 새로 7 값을 만들거나 재활용함. 즉, 1은 절대로 변화하지 않음.
<aside> 💡 참조형 데이터는 기본적인 경우 가변값, 즉 변할 수 있는 값이다.
</aside>
객체 내 변수들에 대한 변수 영역이 추가적으로 존재한다. 객체 내 변수들은 변화하지만 객체 자체의 변수 데이터에 대응하는 주소값은 변하지 않으므로 참조형 데이터는 가변값이다.
var obj1 = {
a: 1,
b: 'bbb'
}
변수 영역
주소 | 1001 | 1002 | 1003 | 1004 | 1005 |
---|---|---|---|---|---|
데이터 | 이름: obj1 | ||||
값: @5001 |
데이터 영역
주소 | 5001 | 5002 | 5003 | 5004 | 5005 |
---|---|---|---|---|---|
데이터 | @7103 ~ ? | 1 | 'bbb’ |
객체 @5001의 변수 영역
주소 | 7103 | 7104 | 7105 | 7106 | 7107 |
---|---|---|---|---|---|
데이터 | 이름: a | ||||
값: @5003 | 이름: b | ||||
값: @5004 |