함수를 값으로 다룰 수 있는 개념.
var f1 = function(a) { return a * a; };
console.log(f1); // function(a) { return a * a; };
var f2 = add;
console.log(f2);
변수에 함수를 담을 수 있다는 사실이 중요.
함수가 함수를 인자로 받을 수 있다.
function f3(f) {
return f();
}
console.log( f3(function() { return 10; }) ); // 10
console.log( f3(function() { return 20; }) ); //20
add_maker은 함수를 리턴하는 함수/
function add_maker(a) {
return function(b) { // 이 함수는 closer이기도 하다. a라는 값을 기억하는 함수가 되어서 클로저...가 된다.
return a + b;
}
}
아래처럼 사용.
var add10 = add_maker(10);
// add10 = function(b) { return 10 + b };
console.log( add10(20) );
//30
일급함수 + 클로저 개념이 사용된 함수이다.
아래처럼 여러 add_maker을 만들 수 있다.
var add5 = add_maker(5);
var add15 = add_maker(15);
console.log( add5(10) ); //15
console.log( add15(10) ); //25
console.log( add10(20) ); // 30
a라는 값은 함수내부에서 사용하고 있지만, a값을 함수 내부에서 변경하는 것이 아니기 때문에, addN은 순수함수이다.
function f4(f1, f2, f3) {
return f3(f1() + f2());
}
console.log(
f4(
function() { return 2; },
function() { return 1; }, // f3 (2 + 1)
function(a) { return a * a; })); // 9