🚩 함수 내부에서 외부로부터 주어진 인자의 값을 변경하는 것은 절대 절대❌

✏ 원시값 → 값에 의한 복사 / 객체값 → 참조에 의한 복사(메모리주소)

📌 이유

원본의 객체마저 바뀌게 된다.

객체는 값이 아닌 **메모리주소(레퍼런스)**를 전달하기 때문에, 메모리 주소를 타고 들어가 변경시켜버린다.

✏

function display(num){
	num = 40;
	console.log(num);
}
const value = 4;

display(value); //40 함수 내부에서 주어진 인자 값의 영향을 받음
console.log(value); //4 전역변수 value를 출력함

✏

function displayObj(obj){
	console.log(obj);
}
const mike = { name: 'Mike' };

displayObj(mike); //{ name: 'Mike' }
displayObj("Tom"); //Tom

❌

function displayObj(obj){
	obj.name = 'Bob';
	console.log(obj);
}
const mike = { name: 'Mike' };

displayObj(mike) //{ name: 'Bob' }
displayObj({name: 'Jay'}) //{ name: 'Bob'}

⭕ 상태 변경이 필요한 경우에는, 새로운 상태(오브젝트 또는 값)를 만들어서 반환해야 한다.

function changeName(obj) {
  return { ...obj, name: "Julia" };
}

→ 함수 이름부터 변경하는 느낌을 주도록 짓기

→ 반환할때는 새로운 오브젝트 만들기