클로저(Closure)

비지·2023년 10월 21일

혼자스터디

목록 보기
4/5

어휘적 환경(Lexical Environment)

let one;
one = 1;

function addOne(num) {
console.log(one + num);
}

addOne(5);

전역 Lexical 환경
one : 1
addOne : function

내부 Lexical 환경
num : 5

추가 예제

function makeAdder(x) {
	return function(y) {
    	return x + y;
        }
    }
    
const add3 = makeAdder(3);
console.log(add3(2));

전역 Lexical 환경
makeAdder : function
add3: 초기화 x

makeAdder Lexical 환경
x : 3

클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합이다
함수와 렉시컬 환경의 조합
함수가 생성 이후에도 계속 접근 가능

클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억해야 하므로 메모리 차원에서 손해를 볼 수 있다. 하지만 클로저는 자바스크립트의 강력한 기능으로 이를 적극적으로 사용해야 한다.

변수의 값은 누군가에 의해 언제든지 변경될 수 있어 오류 발생의 근본적 원인이 될 수 있다. 상태 변경이나 가변(mutable) 데이터를 피하고 불변성(Immutability)을 지향하는 함수형 프로그래밍에서 부수 효과(Side effect)를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이기 위해 클로저는 적극적으로 사용된다.

profile
나를 위한 업그레이드 아자아자

0개의 댓글