TIR: 완벽가이드 1-2. 코어자바스크립트 함수 - 클로저(4) 220706

Lumpen·2022년 7월 5일
0

TIR

목록 보기
17/40

클로저

다른 언어와 마찬가지로 자바스크립트도 어휘적 유효 범위 (lexical scoping)을 사용한다
함수가 정의된 시점의 변수 유효범위를 사용하여 함수가 실행된다
이러한 어휘적 유효 범위를 구현하기 위해, 자바스크립트 함수 객체는 내부 상태에 함수 자체의 코드뿐만 아니라 현재 유효범위 체인에 대한 참조를 포함하고 있다
함수 객체와, 함수의 변수가 해석되는 유효범위 (변수 바인딩의 집합)을 아울러 클로저라고 한다

기술적으로 모든 자바스크립트 함수는 클로저이다
함수는 객체이고, 함수 자신과 관련된 유효범위 체인을 가지고 있기 때문이다
함수 대부분은 함수가 정의되었을 때의 유효범위 체인을 사용하여 호출되고, 클로저가 개입되었는지의 여부는 중요하지 않다
클로저는 정의된 유효범위와 다른 유효범위에서 사용될 때 더욱 흥미롭다
가장 일반적인 경우는 함수가 함수 내부에서 정의한 중첩 함수를 반환하는 것이다
중첩 함수 클로저와 관련된 강력한 프로그래밍 기법들이 있는데, 다른 언어에 비해 자바스크립트는 이러한 기법이 일반적으로 사용된다

자바스크립트의 가비지 컬렉터는 참조하는 대상이 있을 경우 메모리 회수를 하지 않는다
외부의 렉시컬 환경이 종료되어도 계속 변수를 참조할 수 있는 것은 이 때문이다

const counter = () => {
	let n = 0;
  	return {
    	count: () => n++;
      	reset: () => n = 0;
    }
}
const a = counter()
const b = counter()

a.count() // 0
b.count() // 0
a.reset() // reset
a.count() // 0
b.count() // 1

위 counter() 함수는 counter 객체를 반환한다
count()와 reset() 메소드는 하나의 변수를 공유하는
getter, setter 역할을 한다
이 두 메소드는 private한 변수를 공유한다
캡슐화..

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글