
함수가 호출되는 동안 내부와 외부에서 받은 전역 Lexical 환경을 가짐
내부는 외부를 참조하고
내부 안에 없으면 외부 -> 전역 으로 범위를 넓혀 참조하게됨

function makeAdder(x){
return function(y){ * y를 가지고있고 상위함수인 makeAdder의 x에 접근 가능
return x + y;
}
}
const add3 = makeAdder(3);
console.log(add3(2)); -> 5 * add3 함수가 생성된 이후에도
상위함수인 makeAdder의 x에 접근 가능
const add10 = makeAdder(10);
console.log(add10(5)); -> 15
console.log(add3(1)); -> 4
Closure
클로저는 함수와 그 함수의 렉시컬 환경의 조합
함수가 생성될 당시의 외부변수를 기억하고
생성된 이후에도 계속 접근 가능
function makeCounter() { * 외부함수
let num = 0; * 은닉화
return function () { * 내부함수
return num++;
};
}
let counter = makeCounter();
console.log(counter()); -> 1 * 숫자들은 수정 불가
console.log(counter()); -> 2
console.log(counter()); -> 3