클로저
클로저는 지속되는 유효 범위(persistence scope)를 의미합니다.
const add = (x: number) => { // 바깥쪽 유효 범위 시작
return (y:number): number => { // 안쪽 유효 범위 시작
return x + y; // 클로저
} // 안쪽 유효 범위 끝
} // 바깥쪽 유효 범위 끝
console.log(add(1)(2)); // 3
다음과 같은 예에서 함수 안쪽 유효 범위만 놓고 본다면 'x'는 존재하지 않는 변수입니다.
이처럼 범위 안에서 의미를 알 수 없는 변수를 자유 변수(free variable)라고 합니다.
타입스크립트에서는 자유 변수가 존재한다면 바깥쪽 유효 범위에서 'x'라는 변수를 찾아 컴파일합니다.
따라서, 다음과 같이 사용하는 경우 'add1'은 'x' 값의 메모리를 유지합니다.
const add1 = add(1);
'x'의 값을 유지하기 때문에 커리 기능을 사용하지 않는 것 처럼 함수를 호출할 수 있습니다.
console.log(add1(2)) // 3
Do it 타입스크립트 프로그래밍 / 이지스퍼블리싱 참고하였습니다.
반응형
'TypeScript' 카테고리의 다른 글
[TypeScript] 커리(curry) - 함수에 가로 여러개 사용하는 경우 (0) | 2021.07.10 |
---|---|
[TypeScript] 고차함수(high-order function) (0) | 2021.07.10 |
[Typescript] tsconfig.json 구성요소 (0) | 2021.06.30 |
[TypeScript] 깊은 복사와 얕은 복사 - 배열 복사 원본 유지 (0) | 2021.06.26 |
[TypeScript] 제네릭 방식 타입 - T에 관하여 (0) | 2021.06.25 |