함수와 렉시컬 환경의 조합
함수가 생성될 당시의 외부 변수를 기억
생성 이후에도 계속 접근 가능
// 어휘적 환경(Lexical Environment)
let one;
one = 1;
function addOne(num) {
console.log(one + num); // 6
}
addOne(5);
function makeAdder(x){
return function(y) {
return x+y;
}
}
const add3 = makeAdder(3); // function(y)
console.log(add3(2)); // 5 // y:2, 3+2=5
const add10 = makeAdder(10); // x:5, function(10)
console.log(add10(5)); // 15 // y:10, 10+5=15
console.log(add3(1)); // 4 // y:1, 3+1=4
function makeCounter(){
let num = 0; // 은닉화
return function(){
return num++;
};
};
let counter = makeCounter();
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2