자바스크립트

자바스크립트와 call by

devjones 2021. 11. 29. 00:01

기본적으로, 자바스크립트의 데이터타입에는 2가지가 있다.

기본 데이터타입(숫자, 문자열, 불린값, null, undefined)

참조 데이터타입(객체, 배열)

 

왜 참조타입이냐, 그것의 모든 연산이 실제 값이 아닌 참조값으로 처리되기 때문이다.

var objA = {
    val : 40
};

var objB = objA;

console.log(objA.val);  // 40
console.log(objB.val);  // 40

objB.val = 50;

console.log(objA.val);  // 50
console.log(objB.val);  // 50

 

다음으로,

함수 호출의 방식이 기본타입과 참조타입이 다르게 동작하는데

기본타입 : 값에 의한 호출. call by value.

                함수를 호출할 때 인자로 기본타입의 값을 넘길 경우 호출된 함수의 매개변수로 '복사된 값'이 전달

참조타입 : 참조에 의한 호출. call by reference

                함수를 호출할 때 인자로 참조타입인 객체를 전달할 때 객체의 참조값이 그대로 전달된다.

다음의 예제가 그차이를 잘 보여준다.

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

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

    console.log('num :', num);  // 200
    console.log('obj :', obj);  // {value:200}
}

changeArg(a, objA);

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