렉시컬 스코프(lexical scope)

Jayden ·2023년 3월 8일
0

자바스크립트는 함수를 어디서 호출했는지가 아니라 함수를 정의했는지에 따라 상위 스코프를 결정합니다. 즉 함수의 상위 스코프는 자신이 정의된 스코프입니다.

예시를 살펴 보겠습니다.

var x = 1;
fuction foo(){
  
 var x = 10; 
 bar(); 
  
}

function bar() {
	console.log(x);  
}

foo(); // x = 1;
bar(); // x = 1;

함수 bar()를 실행하면, 전역 스코프에 선언된 var = 1;를 참조한다는 것을 알 수 있습니다.

하지만, foo()를 실행하면 foo()함수 스코프 내부에 선언된 var = 10;을 참조하는 것이 아닌 실제 bar()가 선언된 스코프, 즉 전역 스코프에서 선언된 var = 1를 참조하는 것을 확인 할 수 있습니다.

위와 같이, 자바스크립트에서는 상위 스코프는 함수정의가 실행 될때 정적으로 결정되며, 함수 정의(함수 선언문 또는 함수 표현식)이 실행되어 생성된 함수는 상위 스코프를 기억합니다.

이러한 방식을 렉시컬 스코프(lexical scope) 또는 정적 스코프(static scope)라고 합니다.자바스크립트를 비롯한 C, Java, Python 등의 프로그래밍 언어가 렉시컬 스코프를 따릅니다.

profile
J-SONE 프론트엔드 개발자

0개의 댓글