클로저는 어떤 함수의 내부함수와 밀접한 관계를 가지고 있는 주제이다.
내부함수는 외부함수의 지역변수에 접근 할 수 있는데, 외부함수의 실행이 끝나서 소멸된 이후에도 내부함수가 외부함수의 변수에 접근할 수 있다.
이러한 매커니즘을 클로저라고 한다.
에를 들어보자
function outer(){
const title = "Hi";
return function(0{
console.log(title);
}
}
const test = outer();
test();
위 결과는 어떻게 될까?
예상대로 Hi가 출력될 것이다.
outer를 호출하여 그 결과인 익명의 함수가 test에 담기는데
outer 함수가 종료되었음에도 불구하고 익명의 함수에서 Hi를 출력하는 것으로 보아,
외부함수의 지역변수를 사용하는 내부함수가 소멸될때까지 해당 지역변수가 소멸되지 않는 것을 알 수 있다.
다음 예제도 마찬가지이다.
function test(title){
return {
getter:function(){return title},
setter:function(title2){title = title2}
}
}
const temp = test('java');
console.log(temp.getter());
temp.setter('C++');
console.log(temp.getter());
위 결과는
java
C++
으로 나온다.
즉, 클로저란
외부 변수를 기역하고 이 외부 변수에 접근할 수 있는 함수를 의미한다.
자바스크립트의 함수는 자신이 어디서 만들어졌는지를 기억한다는 뜻이다.
장점
- 전역 변수의 오렴을 막고, 변수/값을 은닉하여 사용할 수 있다.
단점
- 클로저는 메모리를 소모한다.
- 스코프 생성과 이후 변수 조회에 따른 퍼포먼스 손해가 있다.
'개발 > Javascript' 카테고리의 다른 글
[Javascript] NaN (0) | 2021.03.01 |
---|---|
javascript 시간 측정하기 (0) | 2021.02.15 |
[Javascript] slice, substring, substr 함수의 차이점 (0) | 2021.01.22 |
[Javascript] 내가 쓰려고 만든 자바스크립트 최소 스패닝 트리/크루스칼/유니온 파인드 (0) | 2020.12.01 |
[Javascript] 내가 쓰려고 만든 이분탐색/이진탐색 코드 (0) | 2020.12.01 |