1. 순수 함수
- 순수 함수(Pure Function)란 어떤 외부 상태에 의존하지도 않고 변경하지도 않는(매개변수를 통해 함수 내부로 전달된 인수에게만 의존해 반환값을 만듬), 즉 부수 효과가 없는 함수를 말한다.
- 순수 함수는 동일한 인수가 전달되면 언제나 동일한 값을 반환하는 함수이다. 그래서 예측 가능한 함수이다.
var count = 0;
function increase(n) {
return ++n;
}
count = increase(count);
console.log(count);
count = increase(count);
console.log(count);
function upper(str) {
return str.toUpperCase();
}
console.log(upper('hello'))
Math.random()
은 순수 함수가 아닙니다. 왜일까요?
- 순수 함수는 어떠한 전달 인자가 주어질 경우, 항상 똑같은 값이 리턴되어야 하지만
Math.random()
은 매 실행 시 마다 다른 값을 리턴하기 때문이다.
어떤 함수가 fetch API를 이용해 AJAX 요청을 한다고 가정해 봅시다. 이 함수는 순수 함수가 아닙니다. 왜일까요?
- AJAX 요청은 네트워크 상황, 서버 상태에 따라 응답 코드가 달라지기 때문에 예측이 불가능하다.
2. 비순수 함수
- 비순수 함수란 외부 상태에 의존하거나(외부 상태에 따라 반환값이 달라지는 함수) 외부 상태를 변경하는, 즉 부수 효과(Side Effect)가 있는 함수를 말한다.
- 비순수 함수는 외부 상태에 의존하거나 외부 상태를 변경하는 함수다.
- 함수 내부에서 외부 상태를 직접 참조하지 않더라도 매개변수를 통해 객체를 전달받으면 비순수 함수가 된다.
var count = 0;
function increase() {
return ++count;
}
increase();
console.log(count);
increase();
console.log(count);