Javascript

[Javascript] 렉시컬(Lexical) 스코프

emmaOH! 2024. 6. 21. 17:11

🐝 상위 스코프의 결정

프로그래밍 언어가 함수의 상위 스코프를 결정하는 방법에는

  • 동적(Dynamic) 스코프: 함수를 호출한 위치에 따라 결정
  • 정적(Static) 스코프 -> 렉시컬(Lexical) 스코프: 함수를 선언한 위치에 따라 결정

두 가지 방법이 있습니다.

 

예를 들어, 아래와 같은 코드가 있을 때

var x = 1;

function foo() {
  var x = 10;
  bar();			// 함수 bar()가 호출된 위치
}

function bar() {	// 함수 bar()가 선언된 위치
  console.log(x);
}

foo();

동적 스코프를 따른다면 함수를 호출한 위치에 따라 상위 스코프를 결정하여,

함수 bar()의 상위 스코프는 -> 함수 foo()와 전역 변수인 x입니다.

 

정적 스코프(렉시컬 스코프)를 따른다면 함수를 선언한 위치에 따라 상위 스코프를 결정하여,

함수 bar()의 상위 스코프는 -> 전역 변수 x입니다.(호출한 위치 상관 없음)

 

그리고 자바스크립트를 포함한 대부분의 프로그래밍 언어는 정적 스코프인 렉시컬 스코프를 따릅니다.

 


🐝 렉시컬 스코프

'어휘의'라는 의미를 가진 'lexical'의 기본형인 'lexicon'은

'특정 언어/분야/개인/집단에서 사용하는 모든 어휘'를 가리키는데, 의미에서도 알 수 있듯이 한정된 범위 내에서 사용한다는 뜻입니다.

 

즉, 렉시컬 스코프란

함수를 어디에 선언하였는지(not 어디서 호출하였는지)에 따라 해당 함수의 상위 스코프가 결정되는 것입니다.

따라서 자바스크립트는 함수를 선언할 때 해당 함수의 상위 스코프가 결정되며,

함수를 호출한 위치는 스코프 결정에 어떠한 영향도 주지 않습니다.

 


다른 스코프에 대한 내용은 블로그의 이전 게시글을 참고해주세요.

[Javascript] 블록 스코프와 함수 스코프

 

[Javascript] 블록 스코프와 함수 스코프

🐝 스코프(Scope)스코프란 어떤 변수에 접근할 수 있는 범위를 의미합니다.스코프의 종류는 아래와 같습니다.전역(global) 스코프: 어디서나 해당 변수에 접근 가능지역(local) 스코프: 한정적인 범

dev-district.tistory.com

 


읽어주셔서 감사합니다:)