클로저(Closure)

이대희·2021년 5월 21일

클로저란

클로저는 외부 변수를 기억하고 외부변수에 접근하는 함수를 말한다. 함수에 함수를 리턴하여 반환하게 되면 함수에 있는 변수는 반환되는 값에 영향을 주고 마치 함수밖에서도 반환된 함수한에서 전역변수인것처럼 보이게된다.

클로저

function f1(){
	let a=1;
    
    return function f2(){
    	return a;
    }
}

let f=f1();
let A=f();
console.log(A);

f1()안에 f2()함수를 반환하는 함수이다. 반환된 function f2가 f에 저장되며
let f=function f2(){,,,}의 형태를 가지게 된다. 또 A는 f에서 리턴된 a=1을 저장하게 된다. A함수만 놓고봤을 때 변수a는 존재하지 않지만 f1에서 선언된 지역변수 a=1의 영향을 받아 1을 반환한다.

이처럼 함수안에 함수를 리턴받게되면 지역변수 a는 console.log(A)까지 영향을 주게되고 함수안에 함수가 리턴되어 위에 함수의 자원을 쓰는 함수를 클로저라고 부른다.

예시

let i;
for ( i = 0; i < 10; i++) {
  setTimeout(function() {
    console.log(i);
  }, 100);
}
// '10'이 10번 출력된다

0.1초 동안 반복문이 모두 돌면서 10이 출력된다.

const outer = function () {
  let a = 1;
  let inner = function () {
    return ++a;
  }
  return inner; 
};
let outer2 = outer();
console.log(outer2()); //2
console.log(outer2()); //3

0개의 댓글