순수함수
1. 동일한 인자에 대해 동일한 결과값을 나타내야된다. ( 수학적 함수 )
2. 인자로 받은 값을 변경하지 않는다.
3. return 값 이외에 다른 방식으로 외부상태에 직접 관여하고 소통하면 안된다.
4. 평가 시점이 중요하지 않는다. ( 언제 어떤 위치에서 쓰던 동일한 인자에 대해 동일한 결과값을 나타내야 한다.)
객체의 인자를 이용한 순수함수
var obj1 = { val : 10 };
function add(obj, b) {
return { val : obj.val +b }
}
add(obj1, 20);
console.log(obj1.val);
var obj2 = add(obj1, 20);
console.log(obj1.val);
console.log(obj2.val);
// obj1의 값을 변경하지 않고 동일한 결과값을 반환하기에 순수함수이다.
일급함수
1. 함수를 언어에서 값으로 다룰 수 있다.
var f1 = function(a) { return a * a; };
console.log(f1);
var f2 = add;
console.log(f2);
function f3(f) {
return f();
}
console.log(f3(function() { return 10; });)
// output : 10;
/* add_maker */
// 일급함수와 클로저의 개념을 함께 사용
function add_maker(a) {
return function(b) {
return a + b;
}
}
// 여기서 리턴된 함수는 클로저이다.
// a라는 값을 기억하기 때문에 클로저이다.
// 클로저이기 때문에 return된 함수는 순수함수이다.(a 값을 참조만 하기 때문)
var add10 = add_maker(10);
console.log(add10(20));
//output : 30
function f4(f1, f2, f3) {
return f3(f1() + f2());
}
console.log(
f4(
function() { return 2 ; },
function() { return 1 ; },
function(a) { return a * a; }));