WEB/JavaScript
[JS] 클로저가 무엇일까?
Kwon_
2021. 3. 23. 13:53
클로저 란?
어떤 함수를 렉시컬 스코프 밖에서 호출해도, 원래 선언되었던 렉시컬 스코프를 기억하고 접근할 수 있도록 하는 특성을 클로저라고 한다.
function outer(){
let name = 'michelle';
function inner(){
console.log(`hello! ${name}`);
}
inner();
return inner;
}
let greeting = outer();
greeting();
outer함수 내부에서 inner 함수를 호출했을 때, 렉시컬 스코프에 따라서 inner함수의 상위 스코프는 outer함수 이다.
따라서 outer함수에 있는 name 변수에 접근할 수 있고 "hello! michelle"을 찍을 수 있다.
greeting 변수에는 outer함수의 리턴값인 inner함수가 담긴다.
outer함수는 이미 종료되어 콜스택에서 빠져 나갔는데, greeting()을 실행해보면 여전히 name 변수에 접근해 "hello! michelle"을 찍는 것을 확인할 수 있다.
즉, 클로저는 반환된 함수가 자신이 선언됐을 때의 스코프를 기억하여 자신이 속한 스코프 밖에서 호출되어도 상위 스코프에 접근할 수 있는 함수를 의미한다.