클로저란?
함수와 함수가 선언된 어휘적 환경의 조합
함수를 리턴하는 함수가 클로저의 형태를 만듭니다.
클로저의 핵심은 스코프를 이용해서, 변수의 접근 범위를 닫는(closure; 폐쇄) 데에 있습니다. 따라서, 함수를 리턴하는 것만큼이나, 변수가 선언된 곳이 중요합니다.
외부 함수 ( 보라색 영역 )는 y에 접근이 가능한가요?
→ no, 바깥 스코프에서는 안쪽 스코프로의 접근이불가능합니다.
Q. 내부 함수 ( 노랑색 영역 )는 x에 접근이 가능한가요?
→ yes, 안쪽 스코프는 바깥 스코프에서 선언된 변수에 접근이 가능합니다.
내부 함수는 외부 함수에 선언된 변수에 접근 가능하다.
외부 스코프에서는 내부 스코프의 변수에 접근할 수 없다.
어떤 경우에도 value
는 직접 수정이 불가능
리턴하는 객체가 제공하는 메소드를 통해 value
값을 간접적으로 조작할 수 있는데 이것을 정보의 접근 제한(캡슐화)이라 한다.
const makeCounter = () =>
{
let value = 0;
return
{
increase: () =>
{
value = value + 1;
}
decrease: () =>
{
value = value - 1;
}
getvalue: () => value;
}
}
const counter1 = makeCounter();