함수에 전달되는 인자를 통해 또다른 함수를 호출하는 구조
기존 return을 통해 구현하기 힘들었던 비동기처리 체계를 callback 구조를 통해 구현할 수 있다.
//넘겨받은 callback 함수구조를 선언한다.
function hello(var1, var2, hi){
const var1 = 1
const var2 = 2
hi(var1, var2)
}
//var1, var2 인자를 넘기는 callback 함수를 호출한다.
hello(1,2, (var1, var2)=>{
console.log(var1, var2)
})
쉽게 말하면 함수의 return이 또 다른 함수형태로 되어있는 구조이다.
Closure의 중요한 개념은 외부함수 및 내부함수이며,
외부함수 내부적으로 내부함수가 선언되어 내부함수가 외부함수에서 선언된 변수 등을 참조/접근할 수 있다는 것이다.
function outer() {
var x = 10;
var inner = function () { console.log(x); };
return inner;
}
var hiOuter = outer();
hiOuter(); // 10
위 logic에서 Clousre의 개념은 다음과 같다.
outer()는 hiOuter에 내부 Clousre logic을 반환한 후 실행종료된 것처럼 보이지만(callstack에서 outer() 함수가 소멸되어 변수 x에 접근불가), 내부 Clousre 함수를 다시 한번 호출하여 변수 x를 참조할 수 있게 되었다.
이처럼 외부함수는 실행이 종료되었으나, 내부함수의 logic이 지속될 경우 외부함수에서 선언된 변수에 대해 지속적인 참조가 이루어진다.
이 과정에서 불필요한 변수가 참조되거나, 선언되었음에도 활용되지 않는 메모리 누수가 발생할 수 있기 때문에 이 점을 유의하면서 프로그래밍을 해야 한다.