클로저(Closure)

이대희·2021년 5월 21일
0

클로저란

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

클로저

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개의 댓글