내가 이해한 클로저는 먼저 함수가 선언됐을 때 환경(스코프)를 기억한다.
즉, 함수가 생성될 당시의 외부 변수를 기억하고 환경밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수이다.
처음에 환경이라는 말이 잘 와닿지 않았다. 환경은 말 그대로 우리 주변의 모든것을 뜻한다. js에서도 함수가 생성될 때 환경은 주변에 변수가 있다면 그 변수는 해당 함수의 환경에 일부인것이다.
이렇게 어휘적 환경이라는 단어가 어렵게 느껴졌지만 나만의 단어로 바꾸어 생각을 해보니 클로저를 알아가는데 도움이 되어가는거 같다.
function outerFn()** {
let outerVar = 'outer'; // 외부 함수의 변수
console.log(outerVar);
function innerFn() { ← 클로저 함수
let innerVar = 'inner'; // 지역 변수
console.log(innerVar);
}
**return innerFn**;
}
let globalVar = 'global'; // 전역 변수
outerFn()(); // outer , inner
let innerFn = outerFn(); // outer
innerFn(); // inner
클로저 함수 안에서는 아래 변수의 접근이 전부 가능하다.
✔️ 지역 변수 innerVar
✔️ 외부 함수의 변수 outerVar
✔️ 전역 변수 globalVar
참고
https://poiemaweb.com/js-closure
https://www.youtube.com/watch?v=tpl2oXQkGZs