렉시컬 스코프는 무엇인가요? (딥다이브 13장)

김민성·2023년 7월 27일

스코프

모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해서 다른 코드가 식별자 자신을 참조할 수 있는 유효범위스코프가 결정됩니다.

자바스크립트 엔진은 스코프를 통해 어떤 식별자를 참조해야 할 것인지 결정합니다.

스코프의 종류

구분 설명 스코프 변수
전역 코드의 가장 바깥 영역 전역 스코프 전역 변수
지역 함수 몸체 내부 지역 스코프 지역 변수

스코프 체인

자바스크립트 엔진은 스코프 체인을 통해 참조할 변수를 검색합니다. 스코프는 함수의 중첩에 의해 계층적 구조를 갖습니다. 모든 스코프는 하나의 계층적 구조로 연결되며 모든 지역 스코프의 최상위 스코프는 전역 스코프다. 이처럼 스코프가 계층적으로 연결된 것스코프 체인입니다.

자바스크립트 엔진은 스코프 체인을 따라 식별자를 참조하는 코드의 스코프에서 시작해서 상위 스코프 방향으로 이동하며 선언된 식별자를 검색합니다.

렉시컬 스코프

프로그래밍 언어는 일반적으로 함수를 어디서 호출했는지함수를 어디서 정의(선언)했는지에 따라 함수의 상위 스코프를 결정합니다.

함수 정의가 평가되는 시점에 상위 스코프가 정적으로 결정되는 방식을 렉시컬 스코프(lexical scope) 또는 정적 스코프라고 합니다. 렉시컬(lexical)은 어휘의라는 사전적 의미를 갖는데, 정의라는 개념과 연관지어서 기억하면 좋을 듯 합니다.

자바스크립트는 렉시컬 스코프를 따르므로 함수를 어디서 정의했는지에 따라 상위 스코프를 결정합니다. 즉, 함수의 상위 스코프언제나 자신이 정의된 스코프입니다.

배운점

동일한 식별자가 코드 내에 여러번 작성되어있으면 무엇을 가리키는지 명확하게 알지 못했습니다. 이번 기회에 자바스크립트 엔진이 식별자를 검색하는 원리에 대해서 알게되었고 확실하게 식별자가 가리키는 것을 식별해낼 수 있을 듯 합니다.

자바스크립트 엔진은 웹 개발자와 브라우저 간의 전달자 역할을 한다고 생각됩니다. 전달자가 어떤 방식으로 전달하는 지를 명확히 알아야 내가 원하는 바를 정확하게 전달할 수 있으므로 자바스크립트 엔진의 작동방식에 대해 주의깊게 살펴봐야겠습니다.

profile
'WHY'를 묻고 reason을 공부하는 개발외ㅓ인

0개의 댓글