// 매개변수 primitive는 **원시 값**을 전달받고, 매개변수 obj는 **객체**를 전달 받는다.
function changeVal(primitive, obj) {
primitive += 100;
obj.name = 'Kim';
}
// 외부 상태
var num = 100;
var person = { name: 'Lee'};
console.log(num); // 100
console.log(person);// {name: "Lee"}
// 원시 값은 값 자체가 복사되어 전달되고 객체는 참조 값이 복사되어 전달된다.
changeVal(num, person);
// 원시 값은 원본이 훼손되지 않는다.
console.log(num); // 100
// 객체는 원본이 휀손된다.
console.log(person); // { name: "Kim" }
매개변수
primitive
매개변수
obj

이처럼 함수가 외부 상태(ex. 객체를 할당한 person 변수)를 변경하면 상태 변화를 추적하기 어려워진다.
⇒ 객체가 변경할 수 있는 값이며, 참조에 의한 전달 방식으로 동작하기 때문에 발생하는 부작용으로 코드의 복잡성을 증가 시키고 가독성을 해친다.