본문 바로가기
WEB/Javascript

Javascript(렉시컬 환경, 클로저)

by 요섹남 2022. 4. 25.

- 렉시컬 환경 -

* 어휘적 환경, Lexical-Environement

* 스크립트 전체, 실행중인 함수, 코드블록 등의 자신만의 렉시컬 환경을 갖는다

 

* 환경레코드

    1. 렉시컬 환경에서 모든 지역변수를 프로퍼티로 저장하고 있는 객체이다

    2. this, 함수일 경우 매개변수도 포함

환경레코드에 저장되어 있는 값이다

* 외부 렉시컬 환경

    1. 현재 렉시컬  환경보다  더 상위의 렉시컬 환경이다

    2. 스크립트는 최상위 렉시컬 환경

    3. 스크립트 내에 호출된 함수나 코드블록은 외부렉시컬 환경으로 스크립트 렉시컬 환경을 참조

 

* 외부 렉시컬 환경을 참조하는 과정

    1. 렉시컬 환경이 만들어질 때 Environment라는 숨김 프로퍼티가 만들어짐

    2. 프로퍼티에는 외부렉시컬 환경이 저장

    3. 지역내에서 참조할 값이 없을 경우 프로퍼티에 접근하여 외부 렉시컬 환경을 참조 그또한 값이 없을 경우 최상위 렉시컬 환경까지 검색하게 되는 체이닝 과정이 일어남

    4. 모든함수는 클로저라고 할 수 있다

    5. 함수는 선언이 아닌  실행될 때 렉시컬 환경이 구성

- 클로저 -

* 클로저(Closure)

* 함수와 함수가 선언된 어휘적(Lexical) 환경의 조합

* 함수가 생성될 당시의 외부 변수를 기억

* 생성 이후에도 계속 접근 가능

* 핵심은 스코프를 이용해서, 변수의 접근 범위를 다는 것에 있다

* 함수가 호출되는 환경과 별개로, 기존에 선언되어 있던 환경을 기준으로 변수를 조회

* 상위 스코프의 식별자를 포함하여 쓰여있는 내부 함수 코드 자체를 어휘적환경 이라고 부를 수 있다

클로저를 사용함으로써 inner 함수에 접근이 가능한 모습

* 클로저가 필요한 이유

    1. 전역변수를 줄일 수 있다

    2. 비슷한 형태의 코드의 재사용률을 높일 수 있다

'WEB > Javascript' 카테고리의 다른 글

DOM 이란  (0) 2022.08.29
Javascript(구조 분해 할당, 나머지 매개변수, 전개 구문)  (0) 2022.04.17
Javascript(호이스팅, 생성자)  (0) 2022.04.04
Javascript(Object, method, array)  (0) 2022.04.01
Javascript(변수, 문법)  (0) 2022.04.01