[javascript] Call By Value / Call By Reference

ChanSol Jeong·2023년 8월 31일
0

javascript

목록 보기
9/9
post-thumbnail

call by valuecall by reference는 변수나 객체등이 함수에서 매개변수(parameter)로 들어와 인자(argument)로 전달될때 어떤 방식으로 전달될 지를 결정하는 방식이다.

함수에서 argument를 호출하는 방식은 크게 2가지이다.

  • call by value : 값에 의한 호출
  • call by reference : 참조에 의한 호출

call by value

call by value는 입력받은 값을 그대로 복사하여 사용한다.

javascript에서는 원시값(Primitive type)들이 call by value 방식을 전달된다.

javascript에서 원시값(Primitive type)은 메모리에 값을 그대로 저장하기 때문에 참조값(주소)을 사용하지 않는다.

call by value로 전달된 값을 변경하게 되어도 매개변수로 넣은 데이터에는 변화가 없다.

call by reference

call by reference는 입력받은 값을 그대로 복사하여 사용하지 않고, 실제 데이터가 존재하는 주소를 가리키는 참조값만을 가져와서 사용한다.

javascript에서는 원시값(Primitive type)을 제외한 모든 값(Object, function, array 등등)이 call by reference 방식으로 전달된다.

call by reference로 전달한 값을 변경한 경우에는 매개변수로 넣은 데이터에 영향을 줄 수 있다.

// 입력받은 원시값 parameter를 변경
const CallByValue = (parameter) =>{
  parameter = 3;
}

let value = 1;
CallByValue(value);
console.log(value); // 1

// 입력받은 Object parameter의 property를 변경
const CallByReference = (parameter) =>{
  parameter.a = 3; // 기존 객체(참조값)를 변경
}

let Obj = {a:1};
CallByReference(Obj);
console.log(Obj); // {a:3}

// 입력받은 Object parameter를 새로운 Object로 변경
const CallByReference2 = (parameter) =>{
  parameter = {a:3}; // 새로운 객체(참조값)을 할당
}

let Obj = {a:1};
CallByReference2(Obj);
console.log(Obj); // {a:1} , 
// 새로운 참조값을 할당하기 때문에 변경되지 않는다.

기존에도 알고는 있던 지식이지만, 업무도중에 용어를 알게되어 다시 한번 정리하였다.

profile
Compostion API 맛있다!

0개의 댓글