클로저

Suyo·2024년 12월 15일

어휘적 환경 (Lexical Environment)

// 1. 처음 Lexical 환경 (전역 Lexical 환경)
//    one은 Lexical 환경에는 올라가나 초기화가 되어있지 않아 사용 불가
//    addOne 함수는 사용가능

// 2. let one; 코드를 만났을 때
//    one은 호이스팅되어 사용은 가능하나 undefined
let one;

// 3. one = 1; 코드를 만났을 때
      one에 숫자 1이 할당된다.
one = 1;
 
function addOne(num) {
	console.log(one + num);
}

// 4. addOne(5)를 만났을 때
      새로운 Lexical환경이 만들어진다. (내부 Lexical 환경)
      이 때 함수가 넘겨받은 매개변수와 지역변수가 할당되어, num에 숫자 5가 할당된다.
addOne(5);
function makeAdder(x) {
	return function(y) {
    	return x+y;
    }
}

const add3 = make Adder(3);
console.log(add3(2));	// add3함수가 생성된 이후에도 상위함수인
						// makeAdder의 x에 접근이 가능하다. ->Closure

const add10 = make Adder(19);
console.log(add10(5));
console.log(add3(1));

클로저(Closure)

함수와 렉시컬 환경의 조합이다. 함수가 생성될 당시의 외부 변수를 기억한다. 생성 이후에도 계속해서 접근이 가능하다.

function makeCounter() {
	let num = 0;
    
    return function() {
    	return num++;
    }
}

let counter = makeCounter();

console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2

counter() 결과값은 수정이 불가능하다. 은닉화에 성공한 것이다.

profile
Mee-

0개의 댓글