클로저 이해하기

SeokSuMIN·2020년 12월 9일
0

클로저

- 외부 렉시컬 환경에 접근할 수 있는 함수

렉시컬 환경:

자바스크립트에선 실행 중인 함수, 코드 블록 {...}, 스크립트 전체는 렉시컬 환경(Lexical Environment) 이라 불리는 내부 숨김 연관 객체(internal hidden associated object)를 생성.

쉽게 말해서 스크립트 전체(전역), {}블럭, 함수는 생성시 렉시컬 환경을 생성한다. 이 환경은 모든 지역 변수를 프로퍼티로 저장하고 있는 환경 레코드와 외부 렉시컬 환경에 대한 참조 정보가 저장되어 있음.

클로저를 이해하려면 렉시컬 환경을 이해해야한다.

ex code

function makeCounter(){
    let count = 0
    return function(){
    	return count++
    }
}

const counter = makeCounter()  <-- makeCounter 함수 내부 렉시컬 환경이 생성됨, 내부 프로퍼티 저장
alert(counter()) <-- 중첩함수가 생성 되면서 중첩함수 내 렉시컬 환경이 구성됨

쉽게 말해 함수 호출시 렉시컬 환경이 구성되고 이 환경은 외부 렉시컬은 참조할 수 있다. 왜?

모든 함수는 생성순간 태어난 렉시컬의 환경을 기억하고 있기 때문.

function makeCounter(){
    let count = 0
    return function(){
    	return count++
    }
}

const counter = makeCounter()  <-- counter 변수에 담아 도달 가능한 상태

counter = null <-- 도달 불가능 상태 내부, 외부 렉시컬환경 메모리에서 제거

그래서 이론상 함수 호출이 끝나도 도달가능한 상태가 되면 렉시컬 환경은 메모리에 남아 클로저가 성립된다.

profile
자극이 필요한 개발자

0개의 댓글