#8 클로저(Closure)

2langk·2021년 3월 22일
0
post-thumbnail
post-custom-banner

자바스크립트 클로저

자바스크립트에서 중요한 개념을 꼽을때 빠지지 않는 클로저이다.
클로저란 스코프 체인으로 연결된 부모 함수의 변수(lexical scope)를 자식 함수가 기억하고 있는 자바스크립트 함수의 특성을 말한다.

function grandPa(num1) {
  const a = num1;
  
  return function parents(num2) {
    const b = num2;
    
    return function son(num3) {
      const c = num3
      
      return a + b + c
    }
  }
}

const fn1 = grandPa(1) // a는 1이고, parents 부분이 남는다.
const fn2 = grandPa(2) // a는 2이고, parents 부분이 남는다.

const fn11 = fn1(1) // b는 1이고, son 부분이 남는다. (a는 1임을 기억하고 있다.)
const fn22 = fn2(2) // b는 1이고, son 부분이 남는다. (a는 2임을 기억하고 있다.)

fn11(1) // 3. a, b, c 가 모두 1이다.
fn22(2) // 6. a, b, c 가 모두 2이다.

내가 클로저를 처음 접했을 때 의문을 가졌던 부분은

const fn1 = grandPa(1) 이 부분이었다.

이렇게 해버리면 grandPa 함수가 return을 하고, parents 부분만 남기 때문에 a에 대한 정보는 잃는게 아닌가 싶었다. 그런데 자바스크립트에서 함수는 이 정보를 기억하고 있었다.


다른 예시

const fn33= grandPa(3)(3) // a,b는 3으로 고정, son 부분이 남는다.

fn33(4) // 10. c만 바뀐다.
fn33(5) // 11
fn33(6) // 12

const fn4 = grandPa(4) // a를 고정
const fn45 = fn4(5) // b만 바뀐다.
const fn46 = fn4(6)

이렇게 클로저를 이용하면 부모 함수의 인자(a, b)를 고정하고 자식 함수의 인자만 변경할 수 있다. 추가로, 클로저를 이용하면 부모 함수에서 선언한 변수를 private한 변수처럼 사용할 수도 있다.

오늘은 자바스크립트의 클로저를 간단하게 소개해보았다.
클로저는 자바스크립트 함수의 중요한 특성이니 반드시 알고 넘어가자.

다음 시간부터는 prototype을 소개해보도록 하겠다.

post-custom-banner

0개의 댓글