본문 바로가기

프로그래밍 언어/Script

JAVA script 클로저


클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가리킨다.

function outter() {     //외부함수
    var title = ‘coding everybody’;
    function inner() {   //내부함수
        alert(title);
    }
    inner();
}  
outter();

———————————————————————
function outter() {
    var title = ‘coding everybody’;
    return function() {
        alert(title)(
    }
}
var inner = outter();
inner();

위 코드는 실행이 된다!
———————————————————————
<프라이빗 함수 (private method)>
function factory_movie(title) {
    return {
        get_title : function() {
            return title;
        },
        set_title : 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_title());
> Matrix

ghost.set_title(‘공각기동대‘);

alert(ghost.get_title());
> 공각기동대
alert(matrix.get_title());
> Matrix
</프라이빗 함수(private method)>
———————————————————————
<클로저를 사용하면서 자주 일어나는 실수 시정 전>
var arr = []
for(var i = 0; i < 5; i++) {
    arr [i] = function() {
        return i;
    }
}
for(var index in arr) {
    console.log(arr[index]());
}
</클로저를 사용하면서 자주 일어나는 살수 시정 전>
<시정 후>
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]());
}
</시정 후>

'프로그래밍 언어 > Script' 카테고리의 다른 글

JAVA script 매개변수  (0) 2022.12.13
JAVA script arguments  (0) 2022.12.13
JAVA script 함수2  (0) 2022.12.12
JAVA script 유효범위  (0) 2022.12.12
JAVA script 정규표현식 옵션  (0) 2022.12.12