JavaScript-클로저(Closure)

이정후·2022년 7월 4일
0

자바스크립트

목록 보기
6/14

이 코드로 클로저에 대해 간단하게 알아보자.
우선 console의 결과를 살펴보면 두 번째 콘솔은 undefined를 반환했다.
선언만 되었을뿐 할당되지 않아 사용할 수 없는 것이다. 그 이후 one에 1을 할당하였기에

console.log(one); //1

이 되는 것이다.
addOne은 함수이다. 함수는 이미 사용이 가능하게 되어있는데 let으로 선언한 것은 왜 안되는 것일까?

Lexical Enviroment

렉시컬 환경은 글로벌 렉시컬 환경(Global Lexical Enviroment)이다. 전역 코드가 시작되면 렉시컬 환경 객체가 만들어지고, 코드를 실행하기 앞서 선언되어 있는 변수와 함수를 먼저 글로벌 환경 레코드에 저장한다. 이 때, 저장 방식이 변수 또는 함수 선언 방식에 따라 조금 차이가 있다.

let, const로 선언된 경우에는 환경 레코드에 변수 이름을 key로, uninitialized 라는 상태를 value로 초기화한다. undefined와 달리 이 상태는 참조할 수 없는 값이다. 그래서 이 변수가 선언된 줄에 도달하기 전에 변수를 참조하고자 한다면, var와 달리 ReferenceError가 발생한다. 그래서 변수 선언 줄에 도달하기까지의 영역을 변수에 접근할 수 없다는 의미로 Temporary Dead Zone이라고 한다.

Closure

참조할 수 있는 값을 참조하는데, 전역과 내부로 나누어서 참조하는 것 같다..
함수와 렉시컬 함수의 조합으로 함수가 생성될 당시의 외부 변수를 기억하고 생성 이후에도 계속 접근이 가능 한 것이다.

profile
꾸준하게

0개의 댓글