✔️ 클로저? 어떤 함수에서 선언한 변수를 참조하는 내부함수를 외부로 전달할 경우, 함수의 실행 컨텐스트가 종료된 후에도 해당 변수가 사라지지 않는 현상
✔️ 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
메모리 관리 : 참조 카운트를 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);
}
}
✔️ 부분 적용 함수? n개의 인자를 받는 함수에 미리 m개의 인자만 넘겨 기억시켰다가, 나중에 (n-m)개의 인자를 넘기면 비로소 원래 함수의 실행 결과를 얻을 수 있게 하는 함수
✔️ 커링 함수? 여러 개의 인자를 받는 함수를 하나의 인자만 받는 함수로 나눠서 순차적으로 호출될 수 있게 체인 형태로 구성한 것
var curry5 = func => a => b => c => d =? e => func(a,b,c,d,e);
⇒ 마지막 인자가 넘어갈 때까지 함수 실행을 미루는 것 : 지연실행