티스토리 뷰

생활 코딩/JAVASCRIPT

클로저

준승박 2021. 8. 17. 19:38

클로저

1) 클로저 개념
함수 outter의 리턴 값은 내부함수다.
그리고 변수 inner에 내부함수가 값으로 저장된다.
outter 호출이 종료된 순간, outter는 사라진다.
하지만, inner()를 실행했을 때 알럿창에 coding everybody가 보인다.
내부함수는 외부함수가 종료되도 외부함수에 접근할 수 있다.

function outter() {

var title = 'coding everybody';

    return function(){

        alert(title);

    }

}

inner = outter();

inner();
private variable

function factory_movie(title){

    return{

        get_title : function(){

            return title;

        },

        set_tile : function(_title){

            if(typeof _title === 'String'){

                title = _title;

            } else{

                alert('제목은 문자열이여야 합니다.');

            }

        }

    }

}

ghost = factory_movie('Ghost in the shell');

matrix = factory_movie('Matrix');

alert(ghost.get_title());    //Ghost in the shell

alert(matrix.get_tiel());    //Matrix
클로저의 응용


var arr = [];
for( var i=0; i < 5; i++){

    arr[i] = function(){

        console.log(i);

    }

}

for( var index in arr ){

    console.log(arr[index]());

}

//결과는 5 5 5 5 5
함수가 실행되는 시점의 변수가 내부함수에 저장된다.
두번째 반목문에서 배열객체의 함수를 실행하는 순간의 i가 콘솔에 찍히게 된다.
그러나, i는 첫번째 포문에 의해 이미 5가 되어버린 상태이므로 5만 다섯번 찍히게 된다.

var arr = [];

for(var i=0; i < 5; i++){

    arr[i] = function(id){

        return function(){

            return id;

        }

    }(i);

}

for( var index in arr){

    console.log(arr[index]()); 

}
//결과는 0,1,2,3,4

'생활 코딩 > JAVASCRIPT' 카테고리의 다른 글

함수를 호출  (0) 2021.08.17
Arguments  (0) 2021.08.17
값으로서의 함수와 콜백  (0) 2021.08.17
유효범위  (0) 2021.08.17
객체  (4) 2021.08.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함