본문 바로가기

WEB/JavaScript

[JS] 클로저가 무엇일까?

클로저 란?

어떤 함수를 렉시컬 스코프 밖에서 호출해도, 원래 선언되었던 렉시컬 스코프를 기억하고 접근할 수 있도록 하는 특성 클로저라고 한다.

 

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"을 찍는 것을 확인할 수 있다. 

 

즉, 클로저는 반환된 함수가 자신이 선언됐을 때의 스코프를 기억하여 자신이 속한 스코프 밖에서 호출되어도 상위 스코프에 접근할 수 있는 함수를 의미한다.