코드 closure.js
function makeCounterFunction(initVal) { var count = initVal; function Increase( ) { count++; console.log(count); } return Increase; } var counter1 = makeCounterFunction(0); var counter2 = makeCounterFunction(10); counter1( ); counter2( );
조금 독특한 코드죠? makeCounterFunction() 함수에서는 count 변수에 인자로 받은 값(initVal)을 저장하고 Increase()라는 함수를 선언합니다. 그리고 이 함수를 반환합니다.
그리고 이 함수를 두 번 호출해서 각각 counter1과 counter2 변수에 Increase() 함수가 저장되도록 한 다음 그 함수들을 호출했습니다.
어떻게 출력될까요? 브라우저에서 로드하면 다음과 같이 출력됩니다.
실행 결과
1 11