Call by Value, Call by Reference란 변수, 함수 등에 인자가 대입될 때, 이 인자를 어떠한 방식으로 넘겨줄지 결정하는 것을 의미한다. 자바스크립트에서는 이 결정이 어떻게 이루어질까?

1. 값의 복사 (Call by value, 깊은 복사)


말 그대로 값이 그대로 복사되는 것을 의미한다.

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는 저마다 별도의 값을 가지고 있기 때문이다.  

2. 주소의 복사 (Call by reference, 얕은 복사)


주소의 복사는 데이터가 있는 공간(메모리의 위치)이 참조 되는 것을 의미한다.

JS에서 객체는 주소의 복사가 일어난다. (연동 O)