클로저(closure)

Bin2·2022년 5월 23일
0

1. 클로저란?

  • 함수와 그 함수가 선언됐을 때의 어휘적 환경(lexical environment)의 조합

2. 렉시컬 환경이란?

  • 함수가 선언된 주변 환경을 의미한다.
  • 주로 외부 함수의 변수가 내부 함수의 어휘적 환경에 포함된다.
  • 따라서 내부 함수가 리턴되어도 나중에 클로저의 렉시컬 환경에 접근하여 외부 함수의 변수에 접근할 수 있다.
const adder = function() {
  	let x = 2;
	return function(y) {
    	return x + y;
    }
}

adder(3); // 5
adder(5); // 7

3. 클로저의 활용

3-1. 상태 유지

클로저가 가장 유용하게 사용되는 상황은 현재 상태를 기억하고 변경된 최신 상태를 유지하는 것이다.
토글 기능을 아래와 같이 클로저를 활용하여 구현할 수 있다.

const toggle = function () {
      let isShow = false;
      return function () {
        box.style.display = isShow ? 'block' : 'none';
        isShow = !isShow;
      }
  }

3-2. 전역 변수의 사용 억제

외부 함수에 변수를 선언하여, 함수 내부에서만 변수에 접근할 수 있도록 한다.
이를 통해 의도되지 않은 변경을 걱정할 필요 없이 안정적으로 프로그래밍이 가능하다.

클로저는 사실 자바스크립트의 어떤 함수든 가지고 있다고 볼 수 있다.
어떤 함수든 전역 변수에 접근할 수 있기 때문이다.
자바스크립트에서 private 메서드를 구현하기 위해서도 클로저를 활용할 수 있다. 클로저 내에 있는 변수는 외부에서 접근할 수 없기 때문에, 클로져 내에 있는 변수를 활용 할 수 있는 private 메서드만 따로 노출시켜서 인터페이스처럼 사용할 수 있다.

profile
Developer

0개의 댓글