외부함수의 실행 컨텍스트가 종료된 후에도 해당 함수에서 선언된 변수가 사라지지 않고 🌟메모리를 계속 차지🌟하는 현상
중첩 함수에서 상위 스코프의 식별자를 참조하고 있고, 해당 상위 스코프(외부 함수)의 실행 컨텍스트가 끝나도 해당 함수(내부 함수)가 계속 그 식별자를 참조하면서 식별자가 메모리를 계속 차지하고 있다면 클로저 함수이다.
const adder = function(x) { return function(y) { return x+y; } }
클로저 적용 전
let count = 0; // 전역 변수 (어디서든 접근 가능) function countPlus() { count = count + 1; } ... // 1억 개의 어떤 코드... count = 100 // 아무데서나 count에 접근해 값을 할당할 수 있다. console.log(count) // 100
이런 상황을 막고 싶다면...
클로저 적용 후
function outer() { let count = 0; function countPlus() { count = count + 1; } return countPlus; // 사용할 함수를 return해줘서 외부에서 접근할 수 있게 한다. } ... // 1억개의 코드 // 이제 외부에서는 countPlus 함수를 통하지 않고는 변수 count에 접근할 수 없음.