모던자바스크립트 DeepDive : 13장 스코프

te-ing·2022년 4월 22일
0
post-thumbnail

함수 정의가 평가되는 시점에 상위 스코프를 정적으로 결정하는 방식을 렉시컬 스코프라고 한다. 자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따르기 때문에 함수의 상위 스코프는 언제나 자신이 정의된 스코프이다.

스코프는 식별자가 유효한 범위 이며, 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙이라고도 할 수 있다.

자바스크립트 엔진은 코드를 실행할 때 코드의 문맥(context)을 고려한다. 따라서 코드가 어디서 실행되며 주변에 어떤 코드가 있는지(렉시컬 환경)에 따라 다른 결과를 나타낸다.

스코프 체인

스코프가 함수의 중첩에 의해 계층적으로 연결된 것으로, 상위 스코프의 유효 변수를 하위 스코프에서는 자유롭게 참조할 수 있지만, 하위 스코프의 유효 변수를 상위 스코프에서는 참조할 수 없다.

함수 레벨 스코프

대부분의 프로그래밍 언어는 함수 뿐 아니라 모든 코드 블록(if, for, try/catch ...)이 지역 스코프를 만든다. 이러한 특성을 블록 레벨 스코프라 하는데, var 키워드로 선언된 변수는 중복선언이 가능하기 때문에 오로지 함수의 코드 블록만을 지역스코프로 인정한다. 이를 함수 레벨 스코프 라 한다.

렉시컬 스코프

var x = 1; // 정의되는 시점의 x 값
function foo() {
	var x = 10; // 평가되는 시점의 x 값
	bar();
}
function bar() {
	console.log(x);
}
foo(); // 1
bar(); // 1

함수를 어디서 호출했는지에 따라 상위 스코프를 결정하는 방식을 동적 스코프라고 하며, 함수 정의가 평가되는 시점에 상위 스코프를 정적으로 결정하는 방식을 렉시컬 스코프 혹은 정적 스코프 라고 한다.

자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따르기 때문에 함수가 어디서 정의했는지에 따라 상위스코프를 결정한다. 따라서 함수의 상위 스코프는 언제나 자신이 정의된 스코프이다.

profile
병아리 프론트엔드 개발자🐣

0개의 댓글