*부수효과: 외부 상태를 변경하거나 함수로 들어온 인자 상태를 변경하는 것
즉, 오직 매개변수를 통해 함수 내부로 전달된 인수에게만 의존해 반환값을 만든다.
var count = 0;
function increase(n) {
return ++n;
}
count = increase(count);
console.log(count); //1
순수함수가 반환한 결과값을 변수에 재할당해서 상태를 변경한다.
let num3 = 10
func sum(num1: Int, num2: Int) -> Int {
return num1 + num2 + num3
}
num3을 전역변수라면 결과값은 num3의 값에 따라서 변경이 된다.
var count = 0;
function increase() {
return ++n;
}
increase();
console.log(count); //1
let obj = {
a: 1
};
function func(obj) {
return obj.b = 1; // 인자로 받은 객체에 b 값을 추가하여 리턴
}
func(obj);
console.log(obj); // { a: 1, b: 1 }
위 함수는 외부 obj
객체에 b
가 추가되었기 때문에 순수함수가 아니다.
비순수함수는 외부상태(count)를 변경하므로 상태변화를 추적하기 어려워진다. 따라서 함수 외부 상태의 변경을 지양하는 순수함수를 사용하는 것이 좋다.