참조에 의한 함수 호출

값에 의한 함수 호출

기본 타입의 경우는 값에 의한 호출방식으로 동작한다. 즉, 함수를 호출할 때 인자로 기본 타입의 값을 넘길 경우, 호출된 함수의 매개변수로 복사된 값이 전달된다.

때문에 함수 내부에서 매개변수를 이용해 값을 변경해도, 실제로 호출된 변수의 값이 변경되지 않는다.

참조에 의한 함수 호출

객체와 같은 참조 타입의 경우 함수를 호출할 때 참조에 의한 호출방식으로 동작한다. 즉, 함수를 호출할 때 인자로 참조 타입인 객체를 전달할 경우, 객체의 프로퍼티값이 함수의 매개변수로 복사되지 않고, 인자로 넘긴 객체의 참조값이 그대로 함수 내부로 전달된다.

때문에 함수 내부에서 참조값을 이용해서 인자로 넘긴 실제 객체의 값을 변경할 수 있다.

var a = 100;
var objA = {value: 100};

function changeArg(num, obj){
    num = 200;
    obj.value = 200;

    console.log(num);
    console.log(obj);
}

changeArea(a, objA);        // 200   {value: 200}

console.log(a);             // 100
console.log(objA);          // {value: 200}