코딩을 할때 모든 오브젝트들의 상태가 변경되지 않도록 immutable 하게 코딩하는게 중요하다.
함수내부에서 외부로부터 주어진 인자의 값을 변경하는 것은 좋은 습관이 아니다
상태변경이 필요한 경우에는, 새로운 상태를(오브젝트, 값) 만들어서 반환하자.
원시값과 객체값의 차이 잊지 말자
원시값 - 값에 의한 복사
객체값 - 참조에 의한 복사 (메모리주소)
functiondisplay(num){num=10;// ❌console.log(num);}constvalue=4;display(value);// 10console.log(value);// 4 원시값은 문제가 큰 문제가 되지는 않는다.
functiondisplayObj(obj){obj.name='Chris';// ❌ 외부로 부터 주어진 인자(오브젝트)를 내부에서 변경 ❌console.log(obj);}constMark={name:'Mark'};displayObj(Mark);// { name: Chris}console.log(Mark);// { name: Chris} 원본 데이터가 변경 되는 것은 위험.
// 올바른 방법functionchangeName(obj){// 함수이름 부터 의미 부여return{...obj,name:'Angel'};// 새로운 객체 만들기}constdamon={name:'demon'};console.log(changeName(damon));// { name: 'Angel' }console.log(damon);// { name: 'demon' }