개발/JavaScript

[JavaScript] 코어 자바스크립트 - 6. 클로저

알파카털파카 2023. 6. 7. 23:54

1. 클로저에 대해서 설명해 주세요.

어떤 함수에서 선언된 변수를 참조하는 그 함수의 내부 함수를 외부로 전달할 때, 함수의 실행 컨텍스트가 종료된 이후에도 변수에 접근할 수 있는 현상

 

2. 클로저의 예시를 코드로 작성해 주세요.

const outer = () => {
    let a = 1;
    const inner = () => {
    	return ++a;
    }
    return inner;
}

const outer2 = outer();

console.log(outer2());
console.log(outer2());

inner 함수 자체를 반환하면, outer 함수의 실행 컨텍스트가 종료된 후에도 inner 함수에 접근할 수 있음 

 

3. 클로저와 스코프는 어떤 관계를 가지고 있을까요?

클로저는 함수의 실행 컨텍스트가 종료된 후에도 참조 카운트가 0이 되지 않아서 외부 함수의 LexicalEnvironment가 가비지 컬렉팅의 대상이 되지 않는 현상 

스코프는 스코프 체인을 통해 가비지 컬렉팅되지 않은 LexicalEnvironment을 참조할 수 있음 

가비지 컬렉터의 동작 방식에 의해, 어떤 값을 참조하는 변수가 있다면 그 값은 가비지 컬렉팅 되지 않기 때문 

 

4. 렉시컬 스코프가 무엇인지, 다른 영역의 스코프와 다른 점이 무엇인지 설명해 주세요.

렉시컬 스코프는 함수의 상위 스코프를 결정하는 방식 중 하나이며, 다른 방식으로는 동적 스코프가 존재

렉시컬 스코프는 함수를 어디서 선언했는지에 따라 상위 스코프가 결정됨 

동적 스코프는 함수를 어디서 호출했는지에 따라 상위 스코프가 결정됨 

자바스크립트에서는 렉시컬 스코프를 따르기 때문에, 함수를 선언한 시점에 따라 상위 스코프가 결정됨