🚩 함수 내부에서 외부로부터 주어진 인자의 값을 변경하는 것은 절대 절대❌
✏ 원시값 → 값에 의한 복사 / 객체값 → 참조에 의한 복사(메모리주소)
원본의 객체마저 바뀌게 된다.
객체는 값이 아닌 **메모리주소(레퍼런스)**를 전달하기 때문에, 메모리 주소를 타고 들어가 변경시켜버린다.
✏
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" };
}
→ 함수 이름부터 변경하는 느낌을 주도록 짓기
→ 반환할때는 새로운 오브젝트 만들기