본문 바로가기

JAVASCRIPT

클로저2

클로저(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