Javascript Closure
- 클로저(Closure) ?
- 변수의 Scope를 확장해주는 기능이다
- 예를 들어, 지역변수는 함수가 실행될 때 생성되고, 종료 될때 사라진다.
- 예시
여기서 `test` 는 console.log에 정확하게 출력이 된다. function closer_study1(){ var test = "클로저 테스트" console.log(test) } closer_study1()
하지만,
function closure_study1() {
var test = "클로저 테스트"
}
closure_study1()
console.log(test)
다음의 코드에서는
test
가 정의되어 있지 않은 오류가 발생하게 된다.
그 이유는 test
라는 변수는 closure_study1()
함수 속에서 선언되었고, 함수호출이 끝나면서 사라졌기 때문이다.
그렇다면 어떻게 밖에서 test
변수를 사용할 수 있을까?
다음과 같이 코드를 짜보았다.
function closure_study1() {
var test = "클로저 테스트"
return function(){ // 내부함수
console.log(test)
}
}
var closure_study2 = closure_study1()
closure_study1() // 기존
closure_study2() // 다음
이 코드에서 기존의 함수는 작동하지 않는다. 다음의 함수에서 작동하며, 이것을 클로져라고 한다.
closure_study2를 선언함으로써 test
함수는 closure_study1의 클로저 속에 존재함으로, 지역변수를 포함하여 환경을 유지하는 역할을 해준다.
3. 결론
평소에 Javascript 를 사용한다고 말하고 다녔지만, 이전 면접에서 closure에 대해 질문을 받았었고, 제대로 대답도 못하고 어버버 거렸던 기억이 있다.
이론적인 부분에 대해서 무지했기에 당연한 결과라고 생각한다.
이론적인 부분도 계속해서 공부해서 다음번 면접에서는 좋은 모습을 보여야겠다.