개발/JavaScript

[JS] 렉시컬과 클로저

mabb 2023. 2. 22. 17:48
반응형

 

▷JS는 나한테 없다면 상위에서 찾아쓴다. 선언 시점에 상위 스코프에 대한 참조를 가진다.

*스코프(scope)는 사용이 유효한 범위. Global Scope, Function-Level Scope, Block-Level Scope 등. 함수 내에서 선언했다면 함수 내에서만 유효하고, 코드 블록 내에서 선언했다면 코드 블록 내에서만 유효한 것. JS는 함수레벨 스코프.

▷JS는 함수가 선언되는 시점에 함수 내부에서 사용하는 변수를 해당 스코프 또는 상위 스코프에서 찾는다.->렉시컬 스코프

▷동적 스코프와 정적스코프(렉시컬 스코프)가 있다. 동적 스코프는 함수의 호출 시점에 스코프가 정해지는 것이고 정적스코프는 함수의 선언 시점에 스코프가 정해지는 것을 말한다.

▷외부함수는 내부함수에서 선언한 변수에 접근할 수 없지만 내부함수는 외부함수에서 선언한 변수에 접근할 수 있다. ->스코프 체인

내부함수는 외부함수에서 선언한 변수에 대한 참조를 가지고 있다. 따라서 외부 함수의 변수는 외부함수가 사라져도 GC되지 않는다.

▷함수 선언 시점의 실행환경(렉시컬 환경)이 저장되는 것이다. 이것이 클로저라고 한다.

▷Lexical Scope에 의해 함수 선언 시점에 Scope Chain은 이미 정해져 있다.

▷외부 함수가 사라져도 외부함수에 대한 참조를 가질 수 있는 특성을 이용하여 비공개 변수를 사용할 수 있는 환경을 만들 수 있다.

▷함수 내에서 직접 선언한 것도 아니고 매개변수로 넘겨받은 것도 아닌 변수를 쓸 수가 있다. 이를 비공개 변수라고 한다.->은닉 효과

한 마디로 정리해본다면

렉시컬은 선언 시점에 스코프가 정해지는 것.
클로저는 렉시컬 스코프에서 정해진 실행 환경.

반응형

'개발 > JavaScript' 카테고리의 다른 글

[JS]자바스크립트(JS,Javascript)란?  (0) 2023.02.22