취미처럼

[Javascript] Clouser 본문

JavaScript/이론

[Javascript] Clouser

sirius 2021. 3. 18. 10:19
function 외부함수() {
    var 변수A;
    function 내부함수() {
        변수A 사용;
    }
}

함수 내부에 만든 지역 변수가 사라지지 않고 계속해서 값을 유지하고 있는 상태

클로저는 일종의 현상이기 때문에 정해진 문법은 없음

그래도 표현하자면 위의 문법처럼 내부함수에서 내부함수를 표현하고 있는 함수(외부함수)의 변수 A를 사용하는 구조인 경우로 표현할 수 있으며 내부 함수를 클로저 함수라고 부른다.

또한 변수A는 클로저 현상에 의해 외부함수() 호출이 끝나더라도 사라지지 않고 값을 유지하게 된다.

 

var count = 0;
 
function addCount() {
    count++;
 
    return count;
}
 
console.log(addCount()); //1 
console.log(addCount()); //2 
console.log(addCount()); //3 

클로저 =========================================================

function fncCount() {
    var count = 0;
 
    function addCount() {
        count++;
 
        return count;
    }
 
    return addCount;
}
 
var counter = fncCount();
 
console.log(counter());
console.log(counter());
console.log(counter());

1. fncCounter() 함수가 호출되면 지역변수 0이 초기화 됨에 따라 만들어진다.

그리고 내부에 addCount() 함수가 만들어지고 fncCounter() 함수는 종료된다.

2. counter()가 실행되면 addCount() 함수가 실행되어 증감 연산자에 의해서 count 값이 0에서 1로 증가하기 때문에 1이 출력된다.

3. counter()가 실행되면 count 값이 증가하기 때문에 2와 3이 출력된다.

4. 변수가 메모리에서 제거되지 않고 계속해서 값을 유지하는 상태를 클로저라고 부르며 내부에 있는 함수를 클로저 함수라고 한다.

 

장점

연관 있는 변수와 기능(중첩 함수)을 하나의 함수로 묶어 독립적으로 실행시킬 수 있다.

또한 함수 내부에 데이터가 만들어지기 때문에 함수 외부에서 수정할 수 없는 보호된 데이터를 만들 수 있다.

객체 지향 프로그래밍에서는 private 데이터

'JavaScript > 이론' 카테고리의 다른 글

[JavaScript] == 와 === 의 차이  (0) 2021.03.24
[Javascript] 콜백, 비동기  (0) 2021.03.18
[Javascript] Define Function  (0) 2021.03.18
[Javascript] Array  (0) 2021.03.18
[Javascript] Date  (0) 2021.03.18
Comments