<script>
function outer(){
return function(){
alert('hello world');
};
}
outer()();
</script>
보통 이렇게 함수를 리턴하게 만들수 있다.
결론은 함수를 리턴하는 함수를 사용하는 이유는 클로저(closure)때문이다.
<script>
function outer(name){
var output = 'hello' + name + '!';
}
alert(output);
</script>
이문장은 아무것도 출력하지 않는다 함수안에 있는 output 변수는 지역변수이므로 함수 외부에서 사용할수 없다
하지만 클로저를 사용하면 이 규칙을 위반할 수 있다.
<script>
function outer(name){
var output = 'hello' + name + '!';
return function(){
alert(output);
};
}
outer('anTta')();
</script>
오류가 발생할것 같지만 정상적으로 실행된다.
자바스크립트 스스로 지역 변수 output를 지우면 안된다는 것을 인식하고 남겨두는 특성이다 이것을 클로저라고 한다.
클로저의 정의는 다양하다.
지역변수를 남겨두는 현상을 클로저라고 부르기도 하고
함수 outer() 내부의 변수들이 살아있는것으로 함수 outer()으로 인해 생성된 공간을 클로저라고 부르기도한다.
또한 리턴되는 함수 자체를 클로저라고 부르기도 하며, 살아남은 지역 변수 output를 클로저라고 부르기도 한다.
클로저의 정의는 다양하므로 클로저가 어떤것인지 감만 잡으면 될듯 하다.
'JAVASCRIPT' 카테고리의 다른 글
자바스크립트 주의사항 2 (0) | 2013.10.05 |
---|---|
자바스크립트의 캡슐화 (0) | 2012.12.31 |
자바스크립트 변수 유효 범위 (0) | 2012.08.09 |
자바스크립트 주의사항 (0) | 2012.08.03 |
다이내믹한 웹표준 사이트를 위한 DOM 스크립트 예제 파일 (0) | 2012.07.19 |