클로저(closure)는 내부함수와 밀접한 관계를 가지고 있는 주제입니다.. 내부함수는 외부함수의 지역변수에 접근 할 수 있는데 외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근 할 수 있습니다. 이러한 메커니즘을 클로저라고 합니다. 아래 예제는 이전의 예제를 조금 변형한 것이다. 결과는 경고창으로 coding everybody를 출력할 것입니다.
function outter() {
let title = "coding everybody"
return function() {
alert(title);
}
}
inner = outter();
inner();
return 을 해서 outter라는 함수가 생을 마감했지만
inner()를 선언하는 건 title을 실행하는 구문인데 title은 외부함수에 존재하는 값인데
외부함수안에 내부함수에서 사라진 title을 이미사라진 외부함수에서 접근을 해서 실행이 됩니다.
즉 클로저란 내부함수가 외부함수의 지역변수에 접근 할 수 있고, 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는 특성을 의미합니다.
실용적인 예를 들자면
function factory_movie(title){
return {
get_title : function (){
return title;
},
set_title : function(_title){
title = _title
}
}
}
ghost = factory_movie('Ghost in the shell');
matrix = factory_movie('Matrix');
alert(ghost.get_title());
alert(matrix.get_title());
ghost.set_title('공각기동대');
alert(ghost.get_title());
alert(matrix.get_title());
객체 안에 get_title, set_title 이 두가지 메소드 함수가 있습니다.
이두가지는 내부 함수입니다. 내부함수를 내포하고 있는 외부함수의 지역변수에 접근할수 있습니다.
return 값 title은 매개변수입니다. 매개변수는 함수안에서 지역변수로 사용이 됩니다.
title은 지역변수이고 내부함수에서 접근이 가능합니다.
get_title을 실행하면 tjtle dmf
set-title을 실행하면 _title 이 다시 title이 되서 매개변수 title을 변경하게 됩니다.
ghost= 여기에는 {
get_title : function (){
return title;
},
set_title : function(_title){
title = _title
}
}
return 값이 담기게 됩니다.
matrix= {
get_title : function (){
return title;
},
set_title : function(_title){
title = _title
}
}
return 값이 담기게 됩니다.
ghost.set_title('공각기동대'); 실행이되면 factory _ movie에 지역변수(title)가 바뀌게 됩니다.
하지만 matrix.get-title()에는 어떠한 값을 변하게 하지 않습니다.
factory movie 함수는 return을 해서 생을 마감했기 때문에
get_title , set_title을 통해서 지역변수에 접근을 할수가 있습니다.
이런것들이 프라이빗 변수 입니다.
여기있는 title이라는 정보를 접근할수 있는 정보는 get_title , set_title메소드만이 접근할수 있습니다.
외부에서 함부로 어떠한 영향을줘도 안전합니다.
'JAVASCRIPT' 카테고리의 다른 글
매개변수의 수 (0) | 2020.11.03 |
---|---|
arguments (0) | 2020.11.03 |
클로저1 (0) | 2020.11.02 |
콜백 -처리의 위임 (0) | 2020.11.01 |
함수의 용도2 (0) | 2020.11.01 |