😊
JS - Closure
October 30, 2022
Closure
- func1 함수 안에 func2 함수가 정의되어 있을때 func2 (inner) 함수에서 func1 (outer) 함수의 scope에 접근할 수 있다는 것을 의미한다
function func1() {
const name = 'test';
function func2() {
console.log(name);
}
return func2;
}
const func = func1();
- 위와 같은 함수가 있을때 func에서는 func1에 있는 name에 접근이 가능하다. Garbage Collector에서 사용되고 있는 주소가 있으면 sweep을 하지 않기 때문에 가능하다.
Closure는 언제 사용되는가?
1. 상태 유지
const toggle = () => {
let isShow = false;
return function () {
isShow = !isShow;
return isShow;
};
};
- 클로저를 사용하면 요렇게 isShow 의 상태가 유지된다. React의 useState훅이 클로저를 응용한 내용인듯하다
2. 정보 은닉
const increment = () => {
let count = 0;
return function () {
return ++count;
};
};
- 이렇게 하면 외부에서는 count의 값을 직접 접근해 변경할 수 없기에 count는 private 변수의 느낌으로 사용이 가능하다
3. 커링
function func1(x) {
return function func2(y) {
return x * y;
};
}
const func = func1(5);
func(1); //5
func(2); //10
func(3); //15
- 재사용 때문에 사용 되는 커링이라는 개념에서 사용된다
끝
😊