20_클로저
클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다.
이해를 돕기 위해 우선 전역변수를 책상 위에 놓인 교과서에 비유해보자.
교과서(전역변수)는 수업(프로그램)이 종료되기 전까지 책상(메모리) 위에 있으니 언제든 접근할 수 있다.
이번에는 함수를 필통에, 지역변수는 필통에 담긴 볼펜에 비유해보자.
볼펜(지역변수)은 필통(함수)을 열어서 사용해야 하지만, 연필꽂이(클로저)를 놔두면 수업시간동안 필통을 이용하지 않아도 된다.
이 때 연필꽂이가 바로 오늘의 주제인 클로저다.
function makeAdder(x) { let y = 1; return function(z) { y = 100; return x + y + z; }; } let add5 = makeAdder(5); console.log(add5); // function(z) { // y = 100; // return x + y + z; // }; console.log(add5(2)); // 107 (x:5 + y:100 + z:2)
let add5 = makeAdder(5);
:: 함수 makeAdder를 변수 add5에 전달하며, 지역변수 y(=1)와 x(=5)는 클로저에 저장되었다.
(x, y는 연필꽂이에 꽂아둔 셈)
console.log(add5(2));
:: 클로저에 저장된 x, y값에 접근하여 계산한다.
(계산할 때 x, y를 연필꽂이에서 꺼내서 함께 사용)
- 주의사항
클로저를 남발할 경우 의도치않은 메모리 누수가 발생할 수 있다. (= 연필꽂이가 책상에 많아질수록 책상 위의 공간이 부족해진다.)
Author And Source
이 문제에 관하여(20_클로저), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@taekjun_s/TIL20클로저저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)