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라는 함수가 호출이 끝나도 해당 변수는 삭제될 수가 없다.
댓글 없음:
댓글 쓰기