5. 클로저

jihyun·2022년 1월 9일
0

코어자바스크립트

목록 보기
5/6

5-1 클로저의 의미 및 원리 이해

✔️ 클로저? 어떤 함수에서 선언한 변수를 참조하는 내부함수를 외부로 전달할 경우, 함수의 실행 컨텐스트가 종료된 후에도 해당 변수가 사라지지 않는 현상

✔️ lexical environment의 environmentRecord와 outerEnvironmentReference에 의해 변수의 유효범위인 스코프 스코프 체인이 가능해짐

✔️ combination? 내부함수에서 외부 변수를 참조하는 경우

✔️ 가비지 컬렉터? 어떤 값을 참조하는 변수가 하나라도 있으면 그 값을 수집 대상에 포함시키지 않음

var outer = function () {
	var a = 1;
var inner = function () {
	return ++a;
	};
	return inner;
};

var outer2 = outer();
console.log(outer2()); //2
console.log(outer2()); //3

5-2 클로저와 메모리 관리

메모리 관리 : 참조 카운트를 0으로 만들면 GC가 수거
how? 식별자에 참조형이 아닌 기본형(null or undefined)를 할당

function () {
	var a = 0;
	var intervalId = null;
	var inner = function () {
		if(++a >= 10) {
			clearInterval(intervalId);
			inner = null;		//inner 식별자의 함수 참조를 끊음
	}
	console.log(a);
	}
}

5-3 클로저 활용 사례

5-3-1 콜백 함수 내부에서 외부 데이터를 사용하고자 할 때

5-3-2 접근 권한 제어(정보 은닉)

5-3-3 부분 적용 함수

✔️ 부분 적용 함수? n개의 인자를 받는 함수에 미리 m개의 인자만 넘겨 기억시켰다가, 나중에 (n-m)개의 인자를 넘기면 비로소 원래 함수의 실행 결과를 얻을 수 있게 하는 함수

5-3-4 커링 함수

✔️ 커링 함수? 여러 개의 인자를 받는 함수를 하나의 인자만 받는 함수로 나눠서 순차적으로 호출될 수 있게 체인 형태로 구성한 것

var curry5 = func => a => b => c => d =? e => func(a,b,c,d,e);

⇒ 마지막 인자가 넘어갈 때까지 함수 실행을 미루는 것 : 지연실행

0개의 댓글