call by value란?
const func = (param) => {
param.a = 10;
console.log(param); // 10
};
const obj = { a: 5 };
func(obj);
console.log(obj); // 10
// 쉽게 말하자면,
const obj = { a: 5 };
let param = obj
// 이런 형식으로 객체에 객체가 대입되어 참조 관계가 된 것.
먼저 자바스크립트, 객체 사이의 참조 관계에 관한 이해가 우선이다.
위 코드에서 객체인 obj는 func 함수가 작동되어 매개변수 param의 값에 대입이 되어 obj와 param은 참조 관계가 되었다. func 가 작동하면서 param의 a값을 변경하면 참조 관계에 있는 obj의 a값도 바뀌게 되어 모두 10을 출력하는 것을 알 수 있다.
const func = (param) => {
param = 10;
console.log(param); // 10
};
const obj = { a: 5 };
func(obj);
console.log(obj); // { a: 5 }
하지만, 객체가 아닌 원시값이 대입될 경우 참조 관계가 이루어지지 않는다. 이러한 점에서 자바스크립트 언어는 call by value 형식을 사용하고 있다.
* 자바스크립트에는 call by reference 형식이 존재하지 않는다. call by reference가 가능한 언어라면 위 코드에서 마지막 console에서 obj의 값이 10으로 출력될 것이다.