[ 참고링크 ]
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 라고도 한다.
- 참조로 전달하는 방식과 차이점은 함수 안에서 인자를 새로 할당했을 때 호출한 곳에서 접근할 수 없다는 점이다.
요약
- 함수에 문자열, 숫자 등의 기본 형태의 인자를 넘기면 값을 복사한 지역 변수로 사용한다.
- 함수에 객체 형태의 인자를 넘기면 속성은 공유하지만 새로 객체를 할당할 수는 없다.