call by value
와 call by reference
는 변수나 객체등이 함수에서 매개변수(parameter)로 들어와 인자(argument)로 전달될때 어떤 방식으로 전달될 지를 결정하는 방식이다.
함수에서 argument를 호출하는 방식은 크게 2가지이다.
call by value
는 입력받은 값을 그대로 복사하여 사용한다.
javascript
에서는 원시값(Primitive type)들이 call by value
방식을 전달된다.
javascript
에서 원시값(Primitive type)은 메모리에 값을 그대로 저장하기 때문에 참조값(주소)을 사용하지 않는다.
call by value
로 전달된 값을 변경하게 되어도 매개변수로 넣은 데이터에는 변화가 없다.
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} ,
// 새로운 참조값을 할당하기 때문에 변경되지 않는다.
기존에도 알고는 있던 지식이지만, 업무도중에 용어를 알게되어 다시 한번 정리하였다.