Amarans
0317 JavaScript | 클로저(closure) | 본문
클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킨다. 클로저는 자바스크립트를 이용한 고난이도의 테크닉을 구사하는데 필수적인 개념으로 활용된다.
내부함수
자바스크립트는 함수 안에서 또 다른 함수를 선언할 수 있다. 아래의 예제를 보자. 결과는 경고창에 coding everybody가 출력될 것이다.
function outter(){
function inner(){
var title = 'coding everybody';
alert(title);
}
inner();
}
outter();
위의 예제에서 함수 outter의 내부에는 함수 inner가 정의 되어 있다. 함수 inner를 내부 함수라고 한다.
내부함수는 외부함수의 지역변수에 접근할 수 있다
function outter(){
var title = 'coding everybody';
function inner(){
alert(title);
}
inner();
}
outter();
위의 예제는 내부함수 inner에서 title을 호출(4행)했을 때 외부함수인 outter의 지역변수에 접근할 수 있음을 보여준다.
function outter(){
var title = 'coding everybody';
return function(){
alert(title);
}
}
inner = outter();
inner();
7행에서 함수 outter를 호출하고 있다. 그 결과가 변수 inner에 담긴다. 그 결과는 이름이 없는 함수다. 실행이 8행으로 넘어오면 outter 함수는 실행이 끝났기 때문에 이 함수의 지역변수는 소멸되는 것이 자연스럽다. 하지만 8행에서 함수 inner를 실행했을 때 coding everybody가 출력된 것은 외부함수의 지역변수 title이 소멸되지 않았다는 것을 의미한다. 클로저란 내부함수가 외부함수의 지역변수에 접근 할 수 있고, 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는 특성을 의미한다.
'JavaScript' 카테고리의 다른 글
0317 Java Script | arguments / arguments.length | (0) | 2020.03.17 |
---|---|
0317 Java Script | 클로저(closure)2 | (0) | 2020.03.17 |
0316 Java Script | 값으로서 함수와 콜백 | (0) | 2020.03.16 |
0313 Java Script | 유효범위 대상 | (0) | 2020.03.13 |
0313 Java Script | 지역변수 와 전역변수의 유효범위 | (0) | 2020.03.13 |
Comments