클로저 란?
어떤 함수를 렉시컬 스코프 밖에서 호출해도, 원래 선언되었던 렉시컬 스코프를 기억하고 접근할 수 있도록 하는 특성을 클로저라고 한다.
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"을 찍는 것을 확인할 수 있다.
즉, 클로저는 반환된 함수가 자신이 선언됐을 때의 스코프를 기억하여 자신이 속한 스코프 밖에서 호출되어도 상위 스코프에 접근할 수 있는 함수를 의미한다.
'WEB > JavaScript' 카테고리의 다른 글
[JS ES6+] 화살표 함수 (=>) 사용법 (0) | 2021.03.26 |
---|---|
[JS] this란 무엇일까 (0) | 2021.03.24 |
[JS] 함수 스코프(Scope)에 대해 좀 더 알아보자 (0) | 2021.03.23 |
[JS] 함수 호이스팅(Hoisting) (0) | 2021.03.23 |
[JS ES6+] var, let, const 차이점과 용도 (0) | 2021.03.22 |