DEEP DIVE - 13장 스코프

Mudi·2022년 10월 25일
0

[Book] Deep Dive

목록 보기
1/5
post-thumbnail

스코프 (Scope)


스코프란 식별자가 유효한 범위

스코프(Scope)는 유효범위라는 뜻을 가진 단어로, 어떤 식별자가 선언이 된 후 다른 코드들이 자신을 참조할 수 있는 범위를 의미합니다.

식별자에는 변수 이름, 함수 이름, 클래스 이름 등이 있습니다.

자바스크립트 엔진은 식별자의 범위에 따라 어떤 식별자를 참조해야할지 결정합니다. 이를 식별자 결정이라고 합니다.

렉시컬과 실행 컨텍스트
코드가 어디서 실행되고 주변에 어떤 코드가 있는지를 '렉시컬 환경(lexical environment)'이라고 합니다. 코드의 문맥을 곧 렉시컬 환경이라고 할 수 있고, 이를 구현한 것을 '실행 컨텍스트(execution context)'라고 합니다.

스코프는 네임스페이스
같은 이름을 사용하는 변수라도 다른 함수에서 정의되었다면 이것은 스코프에 의해 충돌되지 않고 사용할 수 있습니다. 즉, 스코프는 네임스페이스입니다.


스코프의 종류

식별자는 선언되는 위치에 의해서 스코프가 결정 됩니다.

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

전역 스코프 (Global Scope)
코드의 가장 바깥 영역에 선언 된 변수가 가지는 스코프를 의미합니다. 전역 스코프를 가진 변수는 어디서든지 참조할 수 있습니다.

지역 스코프 (Local Scope)
지역은 함수의 몸체 내부를 의미합니다. 지역 변수는 자신이 선언된 지역과 하위 지역(중첩 함수)에서만 참조할 수 있습니다.


스코프 체인

함수 또한 전역에서 정의될 수도, 함수 몸체 내부에서 정의될 수도 있습니다. 이를 함수의 중첩이라 합니다.
함수가 중첩되면 함수의 스코프도 중첩됩니다. 이렇게 스코프가 계층적 구조로 연결되는 것을 스코프 체인이라고 합니다.

변수를 참조할 때 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 검색합니다.

물리적 변화
자바스크립트 엔진은 코드를 실행하기 전에 렉시컬 환경을 실제로 생성합니다. 변수 선언이 실행되면 변수 식별자가 렉시컬 환경의 key로 등록되고, 변수 할당이 일어나면 변수 식별자에 해당하는 값을 변경합니다.

스코프 체인에 의한 변수 검색
자바스크립트 엔진은 스코프 체인을 따라 상위 스코프 방향으로만 검색하기에 하위 스코프에서 상위 스코프에 선언된 변수를 참조할 수는 있지만, 상위 스코프에서 하위 스코프에 있는 변수를 참조할 수는 없습니다.

검색은 한 방향으로만 ! (하위에서 상위로만 !)


함수 레벨 스코프


자바스크립트는 렉시컬 스코프

동적 스코프 : 함수를 어디서 호출했는지에 따라 함수의 상위 스코프를 결정합니다.
렉시컬 스코프(정적 스코프) : 함수를 어디서 정의했는지에 따라 함수의 상위 스코프를 결정합니다.

자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따릅니다. 그러므로 함수가 호출된 위치는 상위 스코프 결정에 어떠한 영향도 주지 않습니다. 함수의 상위 스코프는 자신이 정의된 스코프입니다.

렉시컬 스코프는 '클로저'와 깊은 관계가 있습니다.

출처 : 자바스크립트 DEEP DIVE

0개의 댓글