20_클로저

1316 단어 TILTIL

클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다.

이해를 돕기 위해 우선 전역변수를 책상 위에 놓인 교과서에 비유해보자.
교과서(전역변수)수업(프로그램)이 종료되기 전까지 책상(메모리) 위에 있으니 언제든 접근할 수 있다.

이번에는 함수를 필통에, 지역변수는 필통에 담긴 볼펜에 비유해보자.
볼펜(지역변수)필통(함수)을 열어서 사용해야 하지만, 연필꽂이(클로저)를 놔두면 수업시간동안 필통을 이용하지 않아도 된다.
이 때 연필꽂이가 바로 오늘의 주제인 클로저다.

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를 연필꽂이에서 꺼내서 함께 사용)

  • 주의사항
    클로저를 남발할 경우 의도치않은 메모리 누수가 발생할 수 있다. (= 연필꽂이가 책상에 많아질수록 책상 위의 공간이 부족해진다.)

좋은 웹페이지 즐겨찾기