# Call by Sharing
자바스크립트에 함수의 매개변수를 설명할 때 일반적으로 얘기하는 값으로 전달(Call by Value) 또는 참조로 전달(Call by Reference) 방식으로는 이해하기 힘들다. 아래 코드를 보자.
function change(num, obj1, obj2) {
num = num * 10;
obj1.item = "changed";
obj2 = {item: "changed"};
}
var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};
change(num, obj1, obj2);
console.log(num);
console.log(obj1.item);
console.log(obj2.item);
실행결과는 아래와 같다.
10
changed
unchanged
값으로 전달하는 방식이라면 obj1.item
값이 변해서는 안 되고, 참조로 전달하는 방식이라면 obj2.item
값이 변해야 하지만 두 방식 모두 만족하지 못한다. Call by Sharing 방식으로 설명할 수 있고 자바 진영에서는 Pass by Value, 루비 진영에서는 Pass by Reference 라고도 한다. 참조로 전달하는 방식과 차이점은 함수 안에서 인자를 새로 할당했을 때 호출한 곳에서 접근할 수 없다는 점이다.
# 결론
- 함수에 문자열, 숫자 등의 기본 형태의 인자를 넘기면 값을 복사한 지역 변수로 사용한다.
- 함수에 객체 형태의 인자를 넘기면 속성은 공유하지만 새로 객체를 할당할 수는 없다.