클로저 (Closure)

김경식·2022년 1월 18일
2

자바스크립트

목록 보기
1/6
post-thumbnail

1. 클로저(Closure)의 개념

클로저란 함수 내부에 만든 지역변수가 사라지지 않고 계속해서 값을 유지하고 있는 상태를 말한다.
일반 지역변수의 경우 함수 호출이 완료되면 그 값이 사라지는게 원칙이다.
하지만 클로저를 이용하면 함수 호출이 완료된 후에도 사라지지 않는 데이터 저장소를 만들 수가 있다.

  • 클로저의 장점

    1) 연관 있는 변수와 중첩함수를 하나의 함수로 묶어 독립적으로 실행할 수 있다.
    2) 함수 내부에 데이터가 만들어지기 때문에 함수 외부에서 수정할 수 없는 보호된 데이터를 만들수 있다.

2. 클로저 원리

내부 함수의 실행 시점에서 외부함수가 종료된 시점이라 하더라도 가비지 셀렉터의 동작방식으로 인해 외부 함수의 Lexical Environment에 접근이 가능하다. (가비지 셀렉터는 어떤 값을 참조하는 변수가 하나라도 있다면 그 값은 수집대상에 포함하지 않는다)

이러한 원리로 외부함수에서 선언한 변수를 내부함수로 전달할 경우 외부함수가 종료된 이후에도 변수가 사라지지 않는다.

once = function (func) {

let called = false;
let result = 0;

return function (){
	if(!called){
    	result = func(arguments);
        called = true;
      }
    return result;
  }
};
// --------------------------------------

const add = function (){ 
  num ++;
}

once(add);
once(add);
once(add);

console.log(once(add)); // 1 

⭐️ once function에서 변수 called를 내부 함수로 전달해 내부함수에서 True로 값이 변경이 되었기 때문에 이후 once를 몇번을 호출해도 출력은 1이 된다.

0개의 댓글