function makeAdder(amount) { return function (number) { return number + amount; }; } var addTwo = makeAdder(2); addTwo(3); // 5
클로저를 설명하는 예문이다.
저 예문에서 같은 결과를 갖는 호출은 이러하다
makeAdder(2)(3); // 5
이것을 어떻게 설명해야할까. 이러한 것을 ‘상향 펀아그 문제(upward Funarg problem)’ 라고 한다고 책은 설명한다.
클로저 개념의 로컬변수를 참조하고 있는 함수 내의 함수이다.
일반적인 프로그램에서 함수가 리턴하면 그안에있는 local 변수는 소멸되나 클로저함수로부터 리턴된 익명함수의 경우 그 로컬변수가 유지된다 는 것이다.
function createFunction() { var local = 100; return function () {return local; }; }
createFunction()(); // 100
filter()
필터를 사용해보자.
먼저 1~10까지의 배열을 만들고
var arr = [1,2,3,4,5,6,7,8,9,10];
그중에 특정요소를 필터링해보자. 예) 3의 배수
arr.filter(function (n) { return n % 3 == 0 }) // [3,6,9]
n에 arr의 값들이 대입되어 3의 배수만 리턴된다.
이제 이것을 응용해 ‘2의 배수‘, ‘3의 배수’를 만드는 클로저를 만들어보자.
var arr = [1,2,3,4,5,6,7,8,9,10]; // 배수필터를 만드는 제너레이터 var generateFilter = function(x){ return function(n) { return n % x == 0 }; } var filter2x = generateFilter(2); // 2의 배수 필터 var filter3x = generateFilter(3); // 3의 배수 필터 arr.filter(filter2x); // [2,4,6,8,10] arr.filter(filter3x); // [3,6,9]
Total Views: 697 ,