참고: 이웅모 《모던 자바스크립트 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

헷갈리기 쉬운 포인트 / 함정

다음 장으로 이어지는 한 줄

객체의 일종이자 동작을 묶는 단위인 함수로 깊이 들어간다.