자바스크립트에서의 클로저와 즉시 실행 함수
이미 아시다시피, 익명 함수를 즉시 호출하고 그 작업 결과를 어떤 변수에 할당할 수 있습니다:
let result = function() {
return '!';
}();
console.log(result); // '!'를 출력합니다
이 경우 즉시 호출되는 함수를 종종 (비록 필요하지는 않지만) 괄호로 감싸는 경우가 많습니다. 이는 함수가 즉시 호출된다는 것을 바로 알 수 있도록 하기 위한 것입니다:
let result = (function() {
return '!';
})();
console.log(result); // '!'를 출력합니다
이제 즉시 호출된 함수의 결과가 익명 함수가 되도록 만들어 보겠습니다:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // '!'를 출력합니다
반환되는 함수가 클로저 안에
변수 num를 저장하도록 만들어 보겠습니다:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
여기에 num++를 추가하면,
함수 func는 완성된 카운터가 됩니다:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); // 1을 출력합니다
func(); // 2를 출력합니다
func(); // 3을 출력합니다
func(); // 4를 출력합니다
func(); // 5를 출력합니다
제 코드를 보지 않고, 스스로 동일한 카운터를 구현해 보세요.
카운터가 5까지 센 후에
다시 처음부터 시작하도록 동작을 수정해 보세요.