참고: 이웅모 《모던 자바스크립트 Deep Dive》 11장
원시 값은 불변이고 변수에 값 자체가 복사되는 느낌이며, 객체는 가변이고 변수에는 참조가 들어가 같은 대상을 공유한다.
| 구분 | 원시 | 객체 |
|---|---|---|
| 변경 | 불가 — 새 값을 만들어 재할당 | 가능 — 같은 객체의 프로퍼티 수정 |
| 변수에 담기는 것 | 값(의 복사) | 참조 |
| 함수 인자 | 복사본 감각 | 같은 객체를 가리켜 외부 상태가 바뀔 수 있음 |
| 비교 | 값 같으면 같음 | 다른 객체면 내용이 같아도 !== |
let a = 10; let b = a; b = 20; 이면 a는 10 그대로다. 원시 재할당은 새 값을 가리키게 할 뿐 예전 값을 수정하지 않는다.
let o1 = { n: 1 }; let o2 = o1; o2.n = 2; 이면 o1.n도 2다. 식별자 두 개가 한 객체를 공유한다. o2 = { n: 3 }처럼 재할당하면 그때부터 다른 객체를 가리킨다.
let a = 10;
let b = a;
b = 20;
console.log(a, b); // 10 20
const o1 = { score: 1 };
const o2 = o1;
o2.score = 99;
console.log(o1.score); // 99
const o3 = { score: 99 };
console.log(o1 === o2); // true
console.log(o1 === o3); // false
객체의 일종이자 동작을 묶는 단위인 함수로 깊이 들어간다.