자바스크립트에서는 다른 컴퓨터 언어와는 조금 다른 특성을 종종 가지고 있습니다. 그 중 종종 사용되는 클로저라는 개념에 대해서 알아보겠습니다.
외부 함수에 접근할 수 있는 내부함수 혹은 이러한 원리를 일컫는 용어인데 스코프에 따라서 내부함수의 범위에서는 외부 함수 범위에 있는 변수에 접근이 가능하지만 그 반대는 실현이 불가능하다는 개념이다.
특징으로는 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는다.
예를 들어 한 함수안에 다른 함수가 있다면 그 안의 함수는 바깥에 정의해놓은 변수를 사용할 수 있지만 그 반대는 가능하지 않다
클로저의 활용
데이터를 보존하는 함수
const add = function (x) { //외부 함수의 변수 x
return function (y) { //내부 함수 변수 y
return x + y;
}
}
const result = add(5) // 외부 함수 fuction(x) 할당
result(3) // 8 // 내부 함수 function(y) 할당
result(8) //13 // 내부 함수 function(y) 할당
클로저는 외부 함수의 실행이 끝나더라도, 외부 함수 내 변수가 메모리 상에 저장됩니다.
(어휘적 환경을 메모리에 저장하기 때문에 가능한 일입니다) 변수 result 에는 클로저를 통해 리턴한 함수가 담겨 있습니다.
result 는 재미있게도, adder함수에서 인자로 넘긴 5라는 값을 x 변수에 계속 담은 채로 남아있습니다.
외부 함수의 실행이 끝났음에도 말이죠
이런한 특징은, 클로저 함수는 "함수를 리턴하는 함수" 라는 점입니다. 함수를 리턴하는 함수가 클로저의 형태를 만듭니다.
또 하나 "내부 함수는 외부 함수에 선언된 변수에 접근 가능하다"는 점입니다.