Closure
내부함수가 외부함수의 맥락에 접근할 수 있는 것을 가리킨다.
function outter() {
// 외부함수
var title = 'Kidow'
function inner() {
// 내부함수
alert(title)
}
inner()
}
outter()
inner라는 내부함수에서 외부함수인 outter에서 선언한 title에 접근할 수 있다. outter를 실행하면 잘 실행된다.
function outter() {
var title = 'Kidow'
return function () {
alert(title)
}
}
var inner = outter()
inner()
여기서 outter를 선언하여 inner를 생성하면 outter는 함수를 리턴했지만 지역번수로 선언한 title은 계속해서 남아있다.
클로저(closure)란 내부함수가 외부함수의 지역변수에 접근할 수 있고, 외부함수는 지역번수를 사용하는 내부함수가 소멸될 때까지 남아있는 특성을 의미한다.
그 외의 특징
- 동일한 외부함수 내에서 만들어진 내부함수는 지역변수를 공유한다.
- 클래스에서 private를 사용하는 것과 효과가 동일하다.
사용하는 이유
1. 정보 은닉
외부에서 함수 내부에 있는 변수에 접근하는 것을 막을 수 있음
2. 상태 유지
내부 변수의 상태가 유지될 수 있기 때문에 안정성 보유
장점
- 유연한 데이터 보존
- 정보 은닉과 보안
- 메모리 관리
단점
- 메모리 누수
- 성능 저하