스코프
: 변수가 어디 범위까지 참조되는 지를 뜻함(= 유효 범위)
- 전역 scope, 지역 scope
- var는 함수 수준의 scope, const와 let은 블록 수준의 scope이다.
클로저
내부함수가 외부함수의 맥락(ex. 지역변수)에 접근할 수 있고, 외부함수 종료 후에도 여전히 접근할 수 있는 특성을 가진 외부함수의 독립된 복사본
: 함수가 선언된 환경의 스코프를 기억하여 함수가 스코프 밖에서 실행될 때에도 기억한 스코프에 접근할 수 있게 함
- ex. 함수 내에 있는 지역 scope의 변수는 실행시점, 즉 함수 밖에서도 클로저를 통해 접근할 수 있다
- 클로저를 이용하여 내부 변수화 함수를 숨길 수 있다. (ex. 함수안의 변수를 밖에서 바로 사용하지 않고, 함수의 return문의 멤버의 값으로 할당한 뒤 밖에서 사용하는 방식)
⇒ 외부 함수의 지역변수는 따로 리턴하지 않는 이상 전역에서 접근할 수 없어서, 접근할 수 있는 내부함수를 만들고 이를 리턴하여 전역에서 외부함수의 지역변수를 조작한다.