Daehyunii's Dev-blog

<모던자바스크립트 24장 클로저> TIL-39 본문

✏️ 2022. TIL/July

<모던자바스크립트 24장 클로저> TIL-39

Daehyunii 2022. 7. 22. 16:14

  오늘 공부한 내용은 클로저이다. 클로저는 외부 함수보다 생명주기가 길며 외부 함수의 식별자를 참조하는 중첩 함수를 말한다. 비록 외부 함수의 생명 주기가 종료되어 외부 함수의 실행 컨텍스트는 제거 되었을지라도, 외부 함수의 렉시컬 환경은 별도의 객체로 중첩 함수의 [[Environment]] 내부 슬롯이 기억을 하고 있으며, 중첩 함수 호출시 생성되는 중첩 함수의 함수 실행 컨텍스트의 렉시컬 환경(자세하게는 외부 렉시컬 환경 참조)이 외부 함수의 렉시컬 환경을 참조하고 있다. 이는 자바스크립트 함수는 렉시컬 스코프를 갖기 때문이며, 렉시컬 스코프를 갖는 이유는 자바스크립트의 렉시컬 환경에서 그 이유를 찾을 수 있다. 클로저의 개념을 이해하는데는 큰 어려움은 없었다. 또한 클로저가 가져다 주는 장점 또한 정확하게 알 수 있었다. 클로저를 통해 식별자를 숨기고 이를 안전하게 보호하기 위해 클로저를 사용한다. 그런데 한가지 든 의문점은 var 키워드로 선언한 변수는 재선언/재할당이 가능하고 let 키워드로 선언한 변수는 재할당이 가능하기에 클로저를 통해 데이터 상태를 안전하게 은닉해주는 장점을 제공하겠지만, const 키워드로 선언한 변수의 경우에는 재선언/재할당이 불가능한 상수로 변수를 선언하는 것인데, 'const 키워드로 변수를 선언함으로서 클로저를 사용하는 이점과 똑같은 효과를 낼 수 있는것 아닌가?' 하는 생각이 들었다. 'const 키워드를 통해 클로저의 이점과 같은 효과를 낼 수 있다면 굳이 클로저를 사용하면서 코드를 작성할 필요가 없는게 아닌가?' 하는 생각도 들었다. 

 

  사실 개념을 이해하는데 큰 어려움이 없었지만 클로저를 활용해서 코드를 작성하는 것 자체는 쉬운 작업은 아니라는 생각이 들어서 위와 같은 생각이 든 것 일수도 있겠다.ㅎ..

 

2022.07.22 - [언어 공부 및 정리/자바스크립트[모던자바스크립트]] - 24장 클로저

 

24장 클로저

클로저의 핵심 키워드는 '함수가 선언된 렉시컬 환경'이다. 24.1 렉시컬 스코프 자바스크르립트 엔진은 함수를 어디서 호출했는지가 아니라 함수를 어디에 정의했는지에 따라 상위 스코프를 결

pinetree93.tistory.com