var a = 1;
console.log(a);
위와 같이 정의했을 때 자바스크립트는 식별자 혹은 변수명(a)를 식별자 테이블에 저장하고 a의 값인 1을 데이터 테이블에 저장한다.(서로 다른 테이블에 저장되고 저장된 공간?은 고유 주소값을 가지고 있어 변수명 테이블에 변수명과 함께 저장된다.)
a를 호출하면 a라는 변수명을 찾고 함께 저장된 주소값으로 데이터를 찾아 불러온다.
var a = {
b: 1,
c: 2
};
console.log(a.b)
참조형 데이터를 저장할 때는 a를 변수 테이블에 a안의 키이름들을 또 다른 변수 데이터에, 각 키값의 데이터를 데이터 테이블에 저장한다.
객체 a의 테이블에는 a가 가지고 있는 키들의 주소값이 함께 저장되며 이것을 이용해 키의 테이블로 갔다가 키와 함께 저장된 주소값으로 데이터를 불러온다.
선언된 변수에 새로운 데이터를 할당할 때는 데이터 테이블에 새로운 공간을 확보한 후 새로 할당된 데이터를 저장하고 기존 데이터는 삭제된다(기존 데이터를 참조하는 다른 변수가 없을 경우)
변수와 데이터를 따로 저장하는 이유는 비트라는 한정된 공간안에 효율적으로 데이터를 관리하기 위함이다.
let a = { b:1, c:2}
let d = a;
d.b = 3;
console.log(a.b); ///3이 출력됌
let a = {b:1, c:2};
let d = {b:1, c:2};
d.b =3;
console.log(d.b, a.b); //3, 1이 출력됌
위와 같이 내부 프로퍼티를 직접 할당해주면 d가 가진 키와 값들이 a와는 다른 공간에 저장이 되기 때문에 불변성을 지니게 된다. 즉, 객체의 불변성을 지키려면 내부 프로퍼티를 직접 조정해야한다.
이것을 이용해 함수를 만들면 객체의 불변성을 지키면서 값들을 할당, 재할당 할 수 있다.