Call by Value, Call by Reference란 변수, 함수 등에 인자가 대입될 때, 이 인자를 어떠한 방식으로 넘겨줄지 결정하는 것을 의미한다. 자바스크립트에서는 이 결정이 어떻게 이루어질까?
말 그대로 값이 그대로 복사되는 것을 의미한다.
JS에서는 원시데이터(숫자,문자 등등)의 경우 값의 복사(Call by value)가 일어난다. (연동 X)
e.g.
let a = 5;
let b = a;
console.log(`b : ${b}`); // b : 5
b = 10;
console.log(`b : ${b}`); // b : 10
e.g.
function exchange(a,b){
let temp = a;
// 변수의 값을 교환
a = b
b = temp;
return `a는 ${a} 그리고 b는 ${b}`
}
let x = 1;
let y = 2;
exchange(x,y);
// temp = x, x = y, y = x
console.log(`a : ${x} , b : ${y}`); // a : 1 , b : 2
// 두 변수 값이 변하지 않는다.
// x와 y는 원시자료형(정수)이기 때문에 a,b에 값이 복사되었고,
// 따라서 x,y,a,b는 저마다 별도의 값을 가지고 있기 때문이다.
주소의 복사는 데이터가 있는 공간(메모리의 위치)이 참조 되는 것을 의미한다.
JS에서 객체는 주소의 복사가 일어난다. (연동 O)