자바스크립트는 Call By Value로 함수를 호출
대신, 호출 방식에 따라서 인자가 평가되는 과정이 달라진다.
즉, 함수의 매개변수가 원시타입(Primitive Type)인 경우에는 전달받은 인자값을 복사하고, 참조타입(Reference Type)인 경우 메모리 주소값을 복사한다.
function change(pri) {
pri = 'Lite'
}
const seoul = 1
change(seoul)
console.log(seoul) // seoul; = 1
function changeReference(obj) {
obj.seoul = 'Lite'
}
const o2 = { seoul: 1 }
changeReference(o2)
console.log(o2) // {seoul: 'Lite'}
그렇다면 이 코드의 결과는?
function changeReference(obj) {
obj = {seoul:'Lite'}
}
const o2 = { seoul: 1 }
changeReference(o2)
console.log(o2)
{seoul: '1'}
이다.
obj ={}를 주목해야 한다.
즉, 새로운 객체를 할당함으로써 obj가 새로운 메모리 주소를 가리키고 있기에 함수의 인자로 넘어온 o2 객체에 어떤 영향도 주지X
따라서 여전히 {seoul:1}
의 값을 유지