JS

클로저

프도의길 2021. 10. 30. 18:00

자바스크립트에서는 다른 컴퓨터 언어와는 조금 다른 특성을 종종 가지고 있습니다. 그 중 종종 사용되는 클로저라는 개념에 대해서 알아보겠습니다.

 

외부 함수에 접근할 수 있는 내부함수 혹은 이러한 원리를 일컫는 용어인데 스코프에 따라서 내부함수의 범위에서는 외부 함수 범위에 있는 변수에 접근이 가능하지만 그 반대는 실현이 불가능하다는 개념이다.

 

특징으로는 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는다.

예를 들어 한 함수안에 다른 함수가 있다면 그 안의 함수는 바깥에 정의해놓은 변수를 사용할 수 있지만 그 반대는 가능하지 않다

 

클로저의 활용

데이터를 보존하는 함수 

 

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 변수에 계속 담은 채로 남아있습니다.

외부 함수의 실행이 끝났음에도 말이죠

 

이런한 특징은, 클로저 함수는 "함수를 리턴하는 함수" 라는 점입니다. 함수를 리턴하는 함수가 클로저의 형태를 만듭니다.

또 하나 "내부 함수는 외부 함수에 선언된 변수에 접근 가능하다"는 점입니다.

 

'JS' 카테고리의 다른 글

콜백  (0) 2022.01.08
동기/비동기  (0) 2022.01.08
문자열  (0) 2021.10.05
숫자형  (0) 2021.10.04
new 연산자와 생성자 함수  (0) 2021.10.02