클로저(Closer)란?
-
클로저는 선언당시에 환경이라고 생각하면 된다.
-
클로저 개념을 이해하기위해 극단적인 예를 들어보면
-
만약 함수안에서 값이 1초마다 1씩 증가한다고 할 때
-
내가 함수를 선언하는 그 순간에 시간이 5초라면
-
그 함수의 시간은 5초에 머물러있는다.
-
즉 클로저 개념에 의해 선언 당시의 환경으로 구성되어 있는 것이다.
클로저의 장점
-
a()함수안에 선언된 x값은 a()와 b()에서는 접근이 가능하지만
-
a()함수 밖에서는 접근이 안된다.
-
그런데 객체지향 프로그래밍에서는 다르다.
-
외부에서도 자유롭게 접근이 가능해야한다.
-
c라는 변수를 활용하면 외부에서 내부의 변수를 출력할 수 있게 된다.
-
하지만 외부에서 내부의 값을 변경할 수는 없다.
-
외부에서 임의로 내부의 값을 바꾸려면
-
내부함수에서 외부함수에서 바꿀 수 있는 권한(=수단)을 줘야한다.
-
즉 내부에서 반환을 통해 권한을 주면
-
외부에서는 그 권한을 통해 값을 변경시킨다.
- 예제를 통해 동작 흐름을 자세히 알아보자.
-
1,2번이 호이스팅 작업이다.
-
또한 익명함수도 호이스팅의 대상임을 주의하자 !!!
- 또 다른 예
- 정리하자면 다음과 같은 장점이 있음을 알 수 있다.