2016년 3월 26일 토요일

[자바스크립트] 내부 함수

자바스크립트에서는 함수 내부에 또 다른 함수를 정의할 수가 있다.


function parent() {
 var var1 = 'p1';
 var var2 = 'p2';
 
 function child() {
  var var2 = 'p3';
  alert(var1); //p1 
  alert(var2); //p3
 }
 
 child();
}

parent();
child(); // error 

내부 함수의 특징은 다음과 같다.

1. 부모 함수에서만  호출할 수 있다. 부모 함수 밖에서는 해당 함수를 찾을 수 없음.
2. 내부 함수에서는 부모 함수의 변수에 접근이 가능.

그런데 함수는 내부 함수를 리턴할 수가 있다.


function parent() {
 var var1 = 'p1';
 var var2 = 'p2';
 
 function child() {
  var var2 = 'p3';
  alert(var1);
  alert(var2);
 }
 
 return child;
}

var inner = parent();
inner();

parent 함수는 내부 함수 child를 리턴해주고 있다.
그러면 외부에서 함수의 내부함수를 사용하는 것이 가능해진다.
위 예에서 inner 함수는 실행이 끝난 parent() 의 스코프의 변수를 참조하고 있는데 이를
클로저라고 한다.

parent함수가 수행이 되면, 그 함수 스택에 var1과 var2 가 올라가면서 값 p1, p2란 값이 할당될 것이다.
외부에서 이것에 대해 참조하므로 parent라는 함수가 호출이 끝나도 해당 변수는 삭제될 수가 없다.



댓글 없음:

댓글 쓰기