report
라는 이름의 문서를 만들고, shred
라는 이름의 문서를 갈아버리는 (Null로 만드는) 함수를 정의하였다.
var report = {
date: new Date(),
content: 'secret report'
};
function shred(doc) {
doc = null;
}
shred(report);
console.log(report);
작성자가 의도한 바는 shred가 doc으로 받아온 객체에 null을 할당해서 문서를 박살내어 버리는(?) 것이었겠지만 마지막 라인에서 찍히는 report는 멀쩡하다.
왜일까?
shred 함수의 doc이라는 이름으로 받아 함수 내부로 가지고 오는 것은 report가 가리키고 있던 객체의 주소를 복사한 것임에 불과하고, doc라는 변수는 사실 shred 내부에서만 사용되는 지역변수 이기 때문에 해당 변수에 null을 할당한다 해도 전역 스코프에 있는 report가 참조하는 객체에는 아무 영향이 없기 때문이다.
pass-by-reference 로 생기는 일들, 헷갈리지 말자.